как получить доступ к значению YML - PullRequest
5 голосов
/ 15 июля 2011

У меня есть следующий 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 ]

14 голосов
/ 15 июля 2011

Создайте файл в ваших инициализаторах и поместите его внутрь:

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

Тогда в вашем приложении вы получите доступ к его значениям следующим образом:

APP_CONFIG[Rails.env]["bucket"]
1 голос
/ 15 июля 2011

Вам не нужно передавать параметр :bucket, Paperclip уже знает, как использовать ключ bucket: для текущей среды из файла s3.yml.

Также обратите внимание, что если вы вручную скомпилировали Ruby 1.9.2 с помощью RVM, есть вероятность, что вы станете жертвой ошибки в новом движке Psych YAML. Он не любит "DRY" файлы yaml (пока - он был представлен как ошибка и должен быть исправлен в следующем официальном выпуске Ruby). Что происходит, так это то, что каждый элемент, который наследуется от common, только , содержит эти унаследованные элементы (ваш ключ доступа и секретный идентификатор) и фактически не включает в себя дополнительные элементы, которые вы добавляете (в вашем случае, ваш название ведра).

Попробуйте вместо этого создать традиционный yml файл без раздела common (т.е. повторите ключ доступа и секретный идентификатор для каждой среды). Дополнительная информация: Ошибка при загрузке файлов конфигурации YAML в Rails

UPDATE

Последний выпуск Ruby, вышедший сегодня (1.9.2-p290), содержит исправление для этой проблемы.

0 голосов
/ 07 мая 2014

Это немного короче:

APP_CONFIG = YAML.load_file(Rails.root.join("config", "s3.yml"))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...