2012-03-04 4 views
3

J'ai ce code qui se trouve dans le dossier lib. Ce code fonctionne en dehors des rails, mais quand il est appelé à partir du contrôleur de rails je reçois la AWS constante uninitialized :: S3 :: erreur de baseConstante non initialisée AWS :: S3 :: Base

require 'rubygems' 
require 'aws/s3' 

module S3Util 

    def self.upload_file(local_file) 
    mime_type = "application/octet-stream" 
    bucket = "test" 

    AWS::S3::Base.establish_connection!(
     :access_key_id  => '*****', 
     :secret_access_key => '****' 
    ) 

    base_name = File.basename(local_file) 

    puts "**** Uploading #{local_file} as '#{base_name}' to '#{bucket}'" 

    AWS::S3::S3Object.store(
     base_name, 
     File.open(local_file), 
     bucket, 
     :content_type => mime_type 
    ) 

    puts "***** Uploaded!" 

    end 
end 
+0

ne :: AWS :: S3 :: aide de base à tous? – menacingly

+0

qui n'a pas fonctionné – ed1t

+0

Avez-vous ajouté le Gem à votre Gemfile? S'il vous plaît poster la ligne dans Gemfile –

Répondre

0

Rails ne « savent » pas que le module est disponible à l'application ; vous devez l'ajouter aux chemins qu'il regarde. Vous pouvez le faire de plusieurs façons, mais la plupart des gens font ce qui suit.

Ajouter cette ligne à votre config/application.rb:

config.autoload_paths += Dir["#{config.root}/lib/**/"] 

Vous pouvez, à un moment donné, vous voulez être plus précis sur les répertoires sont recherchés, mais vous devriez aller.

+0

J'ai fait la même chose que vous avez demandé de faire mais face à la même erreur ** constante non initialisée AWS :: S3 :: Base ** –

1

juste faire dans votre contrôleur

require 'aws/s3' 

et son travail pour moi