Как загрузить файл из папки config?

Я пытаюсь использовать драгоценный камень evernote для доступа к API Evernote. В этих инструкциях говорится о создании файла конфигурации, содержащего данные учетной записи API, а затем загрузите файл конфигурации следующим образом:

config = File.dirname(__FILE__) + "/config.yml"
user_store = Evernote::UserStore.new(user_store_url, config, "sandbox")

Я создал файл evernote.yml в папке config и поместил следующий код в действие home в pages_controller.rb

config = File.dirname(__FILE__) + "/evernote.yml"
user_store = Evernote::UserStore.new(user_store_url, config, "sandbox")

Когда код запускается, я получаю эту ошибку во второй строке

Errno::ENOENT in PagesController#home
No such file or directory - /Users/ben/rails_projects/evernote_app/app/controllers/evernote.yml

Как загрузить файл конфигурации без получения этой ошибки?

Ответ 1

Проблема заключается в том, что File.dirname(__FILE__) указывает на каталог текущего файла, который является контроллером. Вы хотите указать на каталог config под вашим корневым рельсом. Для выполнения этой работы я бы сделал следующее:

config = File.join(Rails.root, 'config', 'evernote.yml')
user_store = Evernote::UserStore.new(user_store_url, config, "sandbox")

Ответ 2

Попробуйте это,

config_file_path = "#{Rails.root}/config/config.yml"
# or this to load yaml directly
config = YAML::load(File.open("#{Rails.root}/config/config.yml")) 

Rails.root предоставляет путь к корневой папке приложения Rails

Ответ 3

У меня есть потребность в конфиге - это всегда приложение Rails, с которым я когда-либо работал. Здесь, что я использую, поставьте это в config/application.rb перед определением модуля вашего приложения:

# Load config/config.yml into APP_CONFIG
APP_CONFIG = YAML.load(ERB.new(IO.read(File.expand_path('../config.yml', __FILE__))).result)[Rails.env]

Основное отличие этой версии заключается в том, что она запускает файл конфигурации через ERB, что может быть полезно, если вы хотите использовать рубиновые переменные и прочее в конфигурации.