如何访问YML值

Rac*_*Roy 5 yaml ruby-on-rails ruby-on-rails-3

我有以下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???",
Run Code Online (Sandbox Code Playgroud)

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

apn*_*ing 14

在初始化程序中创建一个文件并将其放入:

raw_config = File.read("#{Rails.root}/config/s3.yml")
APP_CONFIG = YAML.load(raw_config)
Run Code Online (Sandbox Code Playgroud)

然后在您的应用中,您将以这种方式访问​​它的值:

APP_CONFIG[Rails.env]["bucket"]
Run Code Online (Sandbox Code Playgroud)

  • +1 从技术上回答“如何访问 yml 值”的问题:) (2认同)
  • 最后我知道```.load```导致挂起文件描述符.替换为```.load_file```并修复它. (2认同)

Dyl*_*kow 1

您不需要传递:bucket参数,Paperclip 已经知道使用文件bucket:中当前环境的密钥s3.yml

另请注意,如果您通过 RVM 手动编译 Ruby 1.9.2,则有可能成为新 Psych YAML 引擎中错误的受害者。它不喜欢“DRY”yaml 文件(然而——它已被归档为一个错误,应该在 Ruby 的下一个正式版本中修复)。发生的情况是,继承自 的每个项目common包含那些继承的项目(您的访问密钥和秘密 ID),并且实际上不包含您添加的其他内容(在您的情况下,您的存储桶名称)。

尝试制作一个yml没有该common部分的传统文件(即为每个环境重复访问密钥和秘密 ID)。详细信息:在 Rails 中加载 YAML 配置文件时出错

更新

今天发布的最新 Ruby 版本 (1.9.2-p290) 修复了此问题。