我有以下yml
/config/s3.yml
common: &common
access_key_id: asddasadsadsad
secret_access_key: adsasddasdasdsa+qlSn+dadadada
development:
<<: *common
bucket: XX_dev
test:
<<: *common
bucket: XX_test
production:
<<: *common
bucket: XX_prod
has_attached_file :photo,
:styles => { :thumb => "70x70>" },
:storage => :s3,
:s3_credentials => "#{RAILS_ROOT}/config/s3.yml",
:path => "/assets/users/:id/:style/:basename.:extension",
:bucket => "????How to get this from the YML based on the ENV???",
我想在回形针中使用它,我该如何访问存储桶?感谢
答案 0 :(得分:14)
在初始值设定项中创建一个文件并将其放入:
raw_config = File.read("#{Rails.root}/config/s3.yml")
APP_CONFIG = YAML.load(raw_config)
然后在您的应用中,您将以这种方式访问它的值:
APP_CONFIG[Rails.env]["bucket"]
答案 1 :(得分:1)
您无需传递:bucket
参数,Paperclip已经知道您可以使用bucket:
文件中的当前环境使用s3.yml
密钥。
另请注意,如果您通过RVM手动编译Ruby 1.9.2,您可能会成为新的Psych YAML引擎中的错误的受害者。它不喜欢“DRY”yaml文件(但它已被归档为bug,应该在Ruby的下一个正式版本中修复)。发生的事情是,每个继承自common
, 的项目都包含这些继承的项目(您的访问密钥和机密ID),并且实际上并不包含您添加的其他内容(在您的case,你的桶名。)
尝试制作传统的yml
文件而不使用common
部分(即重复每个环境的访问密钥和密码ID)。更多信息:Error when loading YAML config files in Rails
<强>更新强>
今天发布的最新版本的Ruby(1.9.2-p290)包含了解决此问题的方法。
答案 2 :(得分:0)
这只是一点点:
APP_CONFIG = YAML.load_file(Rails.root.join("config", "s3.yml"))