Heroku 上 Rails 3.2.11 上的 AWS NameError
AWS NameError on Rails 3.2.11 on Heroku
我的 Rails 3.2.11 应用似乎无法在生产环境中找到下面的 AmazonS3 class。我可以在 rails 控制台中用 AmazonS3.create() 之类的东西调用它,但由于某些原因,当我在 PdfGen.create_pdf 中调用它时(它又从 Rails 中调用请求期间的控制器),我收到以下 NameError。
我不断收到错误
作业 PdfGen.create_pdf (id=XX) 失败(之前尝试了 5 次),出现 NameError:未初始化常量 AmazonS3::AWS
config/application.rb
config.autoload_paths += %W(#{config.root}/lib})
config.autoload_paths += Dir["#{config.root}/lib/**/"] # include all subdirectories
Gemfile.lock
aws-sdk (1.60.1)
aws-sdk-v1 (= 1.60.1)
aws-sdk-v1 (1.60.1)
lib/amazon_s3.rb
class AmazonS3
def self.signed_url(s3_key)
s3 = AWS::S3.new(:access_key_id => S3Config.access_key_id, :secret_access_key => S3Config.secret_access_key)
bucket = s3.buckets[S3Config.bucket]
bucket.objects[s3_key].url_for(:read, :expires => EXPIRES_IN_YEAR_2036)
end
end
lib/pdf_gen.rb
class PdfGen
def self.create_pdf
##some code to generate a pdf
AmazonS3.create(amazon_s3_key, response.body) #store on S3 bucket
end
end
事实证明,这是 gem 本身的问题。我补充说:
gem 'aws-sdk-v1'
到 Gemfile 而不是 aws-sdk 并且它起作用了。
我的 Rails 3.2.11 应用似乎无法在生产环境中找到下面的 AmazonS3 class。我可以在 rails 控制台中用 AmazonS3.create() 之类的东西调用它,但由于某些原因,当我在 PdfGen.create_pdf 中调用它时(它又从 Rails 中调用请求期间的控制器),我收到以下 NameError。
我不断收到错误
作业 PdfGen.create_pdf (id=XX) 失败(之前尝试了 5 次),出现 NameError:未初始化常量 AmazonS3::AWS
config/application.rb
config.autoload_paths += %W(#{config.root}/lib})
config.autoload_paths += Dir["#{config.root}/lib/**/"] # include all subdirectories
Gemfile.lock
aws-sdk (1.60.1)
aws-sdk-v1 (= 1.60.1)
aws-sdk-v1 (1.60.1)
lib/amazon_s3.rb
class AmazonS3
def self.signed_url(s3_key)
s3 = AWS::S3.new(:access_key_id => S3Config.access_key_id, :secret_access_key => S3Config.secret_access_key)
bucket = s3.buckets[S3Config.bucket]
bucket.objects[s3_key].url_for(:read, :expires => EXPIRES_IN_YEAR_2036)
end
end
lib/pdf_gen.rb
class PdfGen
def self.create_pdf
##some code to generate a pdf
AmazonS3.create(amazon_s3_key, response.body) #store on S3 bucket
end
end
事实证明,这是 gem 本身的问题。我补充说:
gem 'aws-sdk-v1'
到 Gemfile 而不是 aws-sdk 并且它起作用了。