我的 Rails 应用程序使用了一个 gem,它需要在 foo.yml 中指定一些配置参数:
development:
username: MyDevUserName
password: MyDevPassword
production:
username: MyPRODUserName
password: MyPRODPassword
我不想在我的源代码中使用密码,而是想做类似的事情:
development:
username: <%= ENV['THE_USERNAME'] %>
password: <%= ENV['THE_PASSWORD'] %>
production:
username: <%= ENV['THE_USERNAME'] %>
password: <%= ENV['THE_PASSWORD'] %>
但是,由于某些原因 <%= ENV['XXX'] %> 确实在我的 Settings.yml 文件中起作用,但在我的 foo.yml 文件中不起作用(我猜 foo gem 会加载.yml 文件,它不允许解释)。
所以...
我想知道 Ruby/Rails 是否有一种通用的方法来指定 environment.rb 中的变量而不是 foo.yml 文件?
例如,我可以有一个空的 foo.yml 文件并将以下内容添加到 environment.rb 中吗:
Foo::_something_._somethingelse =
{
:username => ENV['THE_USERNAME'],
:password => ENV['THE_PASSWORD']
}
最佳答案
编辑:因为您使用的是 Heroku...
Heroku 是另一回事。您对 ENV 的使用可能与 Heroku 中内置的某些功能冲突,这些功能用于处理配置变量,例如您正在使用的配置变量。您需要(请鼓掌)...CONFIG VARS。参见 this page in the Heroku Dev Center有关如何在 Heroku 部署中设置配置变量、如何从您的应用程序访问它们以及如何使其在本地运行的信息。
编辑:下面是原始答案,仍然适用于一般(非 heroku)情况
即使你把它放在 environment.rb 中,它仍然会在你的源代码中。
正确的做法是在你的版本控制中忽略 foo.yml 文件(例如,在 git 中,你会将该文件添加到 .gitignore 文件中)。这样,您就可以在本地获得所需的文件,但它永远不会提交到您的存储库,因此您的信用不会暴露。在您的部署服务器上,您还必须手动创建该文件,因为当您从源代码部署时,部署将没有它。
如果您使用 capistrano 进行部署,一种常见的方法是将文件放在 [app]/shared/config/foo.yml 中,然后添加一个部署任务以从 [sharedpath] 软链接(soft link)到 [releasepath]。 Capistrano 中的此类任务可能如下所示:
task :after_update_code do
run "ln -s #{shared_path}/config/foo.yml #{release_path}/config/foo.yml"
end
关于ruby-on-rails - rails 3 : is there a way to put a gem's config params in environment. rb 而不是 foo.yml?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6223799/