我多年来一直坚持这一点,无法弄清楚出了什么问题。有很多人似乎有同样的问题,但我实际上找不到任何实际有用的答案。
production.rb
config.paperclip_defaults = {
:storage => :s3,
:s3_credentials => {
:bucket => ENV['my bucket name is here'],
:access_key_id => ENV['my key is here'],
:secret_access_key => ENV['my secret key is here']
}
}
game.rb
require 'aws/s3'
class Game < ActiveRecord::Base
attr_accessible :swf, :swf_file_name, :name, :description, :category, :age_group, :dimension_x, :dimension_y, :image, :image_file_name, :feature_image, :feature_image_file_name, :developer, :instructions, :date_to_go_live, :date_to_show_countdown, :plays
has_attached_file :swf
has_attached_file :image
has_attached_file :feature_image
def swfupload_file=(data)
data.content_type =
MIME::Types.type_for(data.original_filename).first.content_type
logger.warn("Data content type is: #{data.content_type}")
self.file = data
end
end
paperclip.rb
Paperclip::Attachment.default_options[:url] = ':s3_domain_url'
Paperclip::Attachment.default_options[:path] = '/:class/:attachment/:id_partition/:style/:filename'
答案 0 :(得分:2)
这是我的回形针初始化内容:
Paperclip::Attachment.default_options.merge!({
storage: :s3,
s3_credentials: {
access_key_id: ENV['S3_KEY'],
secret_access_key: ENV['S3_SECRET'],
bucket: "#{ENV['S3_BUCKET']}-#{Rails.env}"
},
url: ":s3_domain_url",
path: "/:class/:attachment/:id_partition/:style/:filename"
})
这假设我们有三个环境变量设置被调用,你猜对了...... S3_KEY,S3_SECRET和S3_BUCKET。我做了一个小技巧,通过将Rails.env添加到bucket变量,我可以在每个环境中拥有一个不同的存储桶。
您似乎在您的问题中指出您将桶的实际名称放在ENV的引用中,这不起作用。您应该将桶的名称放在环境变量中,并使用环境变量的名称作为密钥。
我希望这会有所帮助。