【发布时间】:2011-10-30 14:57:24
【问题描述】:
我对 ROR 还是很陌生。我最近在 heroku 上部署了一个应用程序,并尝试通过回形针向应用程序添加附件功能。
我已按照所有步骤将 aws-s3 添加到我的应用程序。这是我的初始代码:
user.rb(模型)
has_attached_file :avatar,
:styles => {:small => "70x70>"},
:storage => :s3,
:s3_credentials => "#{RAILS_ROOT}/config/s3.yml",
:path => ":attachment/:id/:style/:basename.:extension"
validates_attachment_size :avatar, :less_than => 1.megabytes
validates_attachment_content_type :avatar, :content_type => ['image/jpeg', 'image/png']
s3.yml(文件位于 config 文件夹中)注意:所有这些存储桶都存在于我的 aws-s3
development:
bucket: my_avatar-dev
access_key_id: amazonaccesskey
secret_access_key: amazon_secret_access_key
test:
bucket: myapp_avatar-test
access_key_id: amazonaccesskey
secret_access_key: amazon_secret_access_key
production:
bucket: myapp_avatar-pro
access_key_id: amazonaccesskey
secret_access_key: amazon_secret_access_key
宝石文件
gem 'aws-s3'
运行此配置时,我会在加载我的应用程序时收到错误页面 500 错误。运行Heroku logs 显示以下错误:AWS::S3::MissingAccessKey(您没有提供两个必需的访问密钥。
所以我遵循了一些建议,并使用以下代码行将 key 和 secret_key 定义为 heroku 的环境变量:
heroku config:add S3_KEY=amazonaccesskey S3_SECRET=amazon_secret_key
然后我添加了一个初始化程序来测试环境并根据环境通过密钥或 .yml 文件启动,代码如下:
initializers/s3.rb
if Rails.env == "production"
# set credentials from ENV hash
S3_CREDENTIALS = { :access_key_id => ENV['S3_KEY'], :secret_access_key => ENV['S3_SECRET'], :bucket => "myapp_avatar-pro"}
else
# get credentials from YML file
S3_CREDENTIALS = Rails.root.join("config/s3.yml")
end
user.rb 模型随后更新为以下内容:
has_attached_file :avatar, :storage => :s3, :s3_credentials => S3_CREDENTIALS
然后我部署到 heroku 并测试了应用程序,但我仍然收到相同的错误(第 500 页)和错误代码:AWS::S3::MissingAccessKey(您没有提供两个必需的访问密钥。
如果我在 heroku 中定义了变量,这怎么可能?有什么我想念的吗?有没有可能是宝石的问题?另外,我正在使用 HAML 进行样式设置......根本不确定这是否重要,但以防万一。我很迷茫,所以任何帮助将不胜感激。非常感谢!
【问题讨论】:
-
你找到答案了吗?我遇到了同样的问题。谢谢。
标签: ruby-on-rails heroku amazon-s3 paperclip