如何从配置文件夹加载文件?

ben*_*ben 12 ruby-on-rails

我正在尝试使用evernote gem访问Evernote API.在这些说明中,它说要创建包含API帐户详细信息的配置文件,然后按如下方式加载配置文件:

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

evernote.yml在config文件夹中创建了一个文件,并将以下代码放入home操作中pages_controller.rb

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

代码运行时,我在第二行收到此错误

Errno::ENOENT in PagesController#home
No such file or directory - /Users/ben/rails_projects/evernote_app/app/controllers/evernote.yml
Run Code Online (Sandbox Code Playgroud)

如何在不收到此错误的情况下加载配置文件?

Pan*_*kos 20

问题是File.dirname(__FILE__)指向当前文件的目录,恰好是控制器.您想指向rails根目录下的config目录.为了完成这项工作,我会做以下事情:

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

  • 您还可以使用 `Rails.root.join('config', 'evernote.yml')`,因为 `Rails.root` 是一个 `Pathname` 对象。 (2认同)

Ris*_*ogi 8

试试这个,

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应用程序根文件夹的路径