我正在尝试在Heroku上使用Paperclip和SWS S3来让用户上传图片。
我没有将凭据存储在yml文件中。我按照Heroku页面上的说明操作: https://devcenter.heroku.com/articles/paperclip-s3
但是,当我尝试运行我的应用并上传图片时,我收到了这条消息:
missing required :bucket option
Rails.root: /Users/scottsipiora/Sites/clycss
Application Trace | Framework Trace | Full Trace
app/controllers/instructors_controller.rb:63:in `block in update'
app/controllers/instructors_controller.rb:62:in `update'
说明中未提及有关在控制器中进行更改的任何内容。我看到一些例子告诉我要输入类似的内容:
在我的模型中,我有以下代码:
class Instructor < ActiveRecord::Base
attr_accessible :bio, :hometown, :name, :school, :sort_order, :started_sailing, :started_teaching, :photo
has_attached_file :photo, styles: {
thumb: '100x100>',
square: '200x200#',
medium: '300x300>'
}
end
在我的production.rb中我(显然用模拟凭证取代了我的真实凭证):
config.paperclip_defaults = {
:storage => :s3,
:s3_credentials => {
:bucket => ENV['bucket name'],
:access_key_id => ENV['key_id'],
:secret_access_key => ENV['access_key']
}
}
我还为Production和Dev创建了单独的存储桶,因此事情变得更加清晰。
有什么想法吗?我比较新,这应该很容易。
提前致谢。
答案 0 :(得分:19)
我想你可能犯了同样的错误。在您的production.rb文件中,不要编辑文本以添加特定的S3密钥。只需直接复制粘贴文本,如教程中所列。
#production.rb
config.paperclip_defaults = {
:storage => :s3,
:s3_credentials => {
:bucket => ENV['AWS_BUCKET'],
:access_key_id => ENV['AWS_ACCESS_KEY_ID'],
:secret_access_key => ENV['AWS_SECRET_ACCESS_KEY']
}
}
然后,按照开发中心文章作者的描述设置环境变量AWS_BUCKET,AWS_ACCESS_KEY_ID和AWS_SECRET_ACCESS_KEY。
答案 1 :(得分:10)
执行heroku config
检查您的环境变量。
通常情况下,它们都是大写字母,并且有下划线而不是空格。
如果未设置,则应使用
设置环境变量heroku config:add BUCKET_NAME=my_bucket_name
更新您的代码:
:bucket => ENV['BUCKET_NAME'],
答案 2 :(得分:7)
我是开发中心文章的作者。正如上面提到的B Seven所述,需要在Heroku应用程序上设置AWS Config Vars。
Heroku最近更新了他们的文档(https://devcenter.heroku.com/articles/config-vars#example),set
比add
更优先。
$ heroku config:set AWS_BUCKET=your_bucket_name
$ heroku config:set AWS_ACCESS_KEY_ID=your_access_key_id
$ heroku config:set AWS_SECRET_ACCESS_KEY=your_secret_access_key
答案 3 :(得分:3)
确保在使用环境变量设置值时重新启动您选择的CLI。不要像我一样,使用ENV变量正确设置Paperclip和AWS,然后在Google上浪费大量时间,通过退出并重新打开终端来解决问题。
答案 4 :(得分:0)
create_table "instructors" do |t| ... t.string "bucket" end
@instructor[:bucket] = ENV['S3_BUCKET_NAME']