如果您将其用作带有 Paperclip 的 s3 存储,您希望将其保留为 yml。在您的初始化程序(config/initializers)中创建一个名为:
app_config.rb
AppConfig = YAML.load(File.read(Rails.root + 'config' + 'config.yml'))[Rails.env].with_indifferent_access
您所有 s3 内容的配置应采用以下格式:
配置.yml
development:
s3:
access_id: access-id
secret_key: secret
bucket_name: your-bucket-name-for-development
staging:
s3:
access_id: access-id
secret_key: secret
bucket_name: your-bucket-name-for-staging
production:
s3:
access_id: access-id
secret_key: secret
bucket_name: your-bucket-name-for-production
此时,您应该能够进入控制台并访问您的 s3 数据,只需输入:
AppConfig[:s3]
你应该得到一个包含所有数据的哈希值,例如:
{"access_id"=>"access-id", "bucket_name"=>"your-bucket-name-for-development", "secret_key"=>"secret"}
如果你想在开发中测试你的 s3 东西,我只是以上面为例,但通常你只需在开发时保存到本地文件目录,并将 s3 用于远程登台和生产环境。
访问存储桶数据是一个不同的对话,取决于您如何将存储桶数据与您的模型相关联。例如,如果您的存储桶数据与 Photo 模型相关联,如下所示:
照片.rb
require 'paperclip'
class Photo < ActiveRecord::Base
belongs_to :album
before_save :set_orientation
if AppConfig['s3']
has_attached_file :data,
:styles => {
:thumb => "200x200>",
:medium => "700x700>"
},
:storage => :s3,
:default_style => :medium,
:bucket => AppConfig['s3']['bucket_name'],
:s3_credentials => { :access_key_id => AppConfig['s3']['access_id'], :secret_access_key => AppConfig['s3']['secret_key'] },
:s3_headers => { 'Cache-Control' => 'max-age=315576000', 'Expires' => 10.years.from_now.httpdate },
:path => "/:class/:id/:style/:filename"
else
has_attached_file :data,
:styles => {
:thumb => "200x200>",
:medium => "700x700>"
},
:storage => :filesystem,
:default_style => :medium
end
private
def set_orientation
self.orientation = Paperclip::Geometry.from_file(self.data.to_file).horizontal? ? 'horizontal' : 'vertical'
end
end
我有一个名为 data 的附加文件名,如 has_attached_file :data 中所示。因此,要访问一些存储桶数据,我会调用:
Photo.first.data(:thumb)
这将提取缩略图照片为返回的第一个 Photo 对象存储的 s3 url。上面的示例还使用了“回形针”gem 和“aws-s3”gem。
config.gem 'aws-s3', :version => '>=0.6.2', :lib => 'aws/s3'
config.gem 'paperclip'
希望这对您有所帮助。