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

时间:2011-02-14 05:28:34

标签: ruby-on-rails

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

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

我在config文件夹中创建了一个文件evernote.yml,并将以下代码放在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

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

4 个答案:

答案 0 :(得分:19)

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

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

答案 1 :(得分: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应用程序根文件夹的路径

答案 2 :(得分:1)

我需要一个配置就是我曾经使用过的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运行配置文件,如果你想在配置中使用ruby变量和东西,这可能很有用。

答案 3 :(得分:0)

如果您使用的是Rails,则从4.2开始,有一种内置的方法:

config = Rails.application.config_for(:evernote)

来源:codelab