ruby-on-rails - rails 3 : is there a way to put a gem's config params in environment. rb 而不是 foo.yml?

标签 ruby-on-rails environment-variables yaml

我的 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/

相关文章:

ruby-on-rails - ActiveRecord - 用警告替换模型验证错误

ruby-on-rails - RSpec 测试 PUT 更新操作

powershell - [Environment]::SetEnvironmentVariable 未永久设置

python - 在 Windows 10 的命令提示符中,'py' 有效但无效 'python'

ruby - 多级关联的数据库对象到 YAML

docker - Docker Compose v3- “Unsupported config option for volumes:”

go - 将未编码的 yaml interface{} 转换为实际结构

ruby-on-rails - 如何在environment.rb中检测我的rails是否正在迁移中运行

ruby-on-rails - 如何检查将脚本/运行程序作为 shebang 的 ruby​​ 脚本的语法?

windows - 如何更改 windows USERNAME 环境变量字符串?