如何访问YML值

时间:2011-07-14 20:50:30

标签: ruby-on-rails ruby-on-rails-3 yaml

我有以下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???",

我想在回形针中使用它,我该如何访问存储桶?感谢

3 个答案:

答案 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"))