2011-03-31 6 views
4

J'utilise Carrierwave 0.5.3 et Fog pour télécharger des images sur Amazon-S3.Carrierwave/Fog - Erreur d'argument, fournisseur non reconnu

La configuration fonctionne sans problème lors de l'exécution locale, sans erreurs.

Mais lors de l'exécution sur Heroku, les téléchargements échouent avec ce message:

2011-03-31T12:53:46-07:00 app[web.1]: ArgumentError (is not a recognized storage provider): 
2011-03-31T12:53:46-07:00 app[web.1]: app/controllers/useditems_controller.rb:36:in `create' 

J'ai un initialiseur:

# /config/initializers/fog.rb 
CarrierWave.configure do |config| 
    config.fog_credentials = { 
    :provider    => 'AWS', 
    :aws_access_key_id  => 'secret', 
    :aws_secret_access_key => 'also secret', 
    :region     => 'eu-west-1' 
    } 
    config.fog_directory = 'jabberwocky' 
end 

Et une Uploader:

# /app/uploaders/image_uploader.rb 
# encoding: utf-8 

class ImageUploader < CarrierWave::Uploader::Base 

    # Include RMagick or ImageScience support: 
    include CarrierWave::RMagick 

    # Choose what kind of storage to use for this uploader: 
    storage :fog 

    # Override the directory where uploaded files will be stored. 
    # This is a sensible default for uploaders that are meant to be mounted: 
    def store_dir 
    "useditems" 
    end 

    def cache_dir 
    "#{Rails.root}/tmp/uploads" 
    end 

    # Create different versions of your uploaded files: 
    version :thumb do 
    process :resize_to_limit => [220, 2000] 
    end 

    # Add a white list of extensions which are allowed to be uploaded. 
    # For images you might use something like this: 
    def extension_white_list 
    %w(jpg jpeg gif png) 
    end 

end 

Je J'ai tracé le message d'erreur à Fog, et il semble que Fog, sous Heroku, n'obtienne pas les informations de configuration de l'initialiseur. :provider est en quelque sorte vide. Mais je suis perplexe quant à la façon de le réparer.

Toute aide serait grandement appréciée.

J'utilise:

rails 3.0.4 
heroku 1.19.1 
fog 0.7.1 
ruby 1.9.2 under rvm 

Répondre

2

L'erreur est due au fait que je l'avais ajouté par erreur le initialiseur au fichier .gitignore. Ainsi, il n'a jamais été téléchargé à Heroku.

2

L'ajout de ce pour être complet ...

Après avoir détruit ma tête contre le mur pendant des heures avec ce message d'erreur, j'ai découvert que j'avais cette ligne au début du carrierwave initialiseur:

if Rails.env.test? 
    ... 

L'initialiseur n'a donc été pris en compte que dans l'environnement de test. Après l'avoir enlevé, tout a fonctionné comme prévu.

+0

Merci, j'avais fait quelque chose de très similaire à ça! – pdobb