我的团队正在维护一个 Rails 应用程序。以前的开发人员决定将一些配置变量(如 facebook 应用程序 ID、Twitter 应用程序 ID)作为环境变量。但这不是很通用。如果我们有两个应用程序(测试和生产),我们将被迫只使用一个硬编码配置(或手动更改它)。将这些变量放在版本控制中也是一种很好的做法。
这是正确的方法吗?如果没有,正确的方法是什么?
我的团队正在维护一个 Rails 应用程序。以前的开发人员决定将一些配置变量(如 facebook 应用程序 ID、Twitter 应用程序 ID)作为环境变量。但这不是很通用。如果我们有两个应用程序(测试和生产),我们将被迫只使用一个硬编码配置(或手动更改它)。将这些变量放在版本控制中也是一种很好的做法。
这是正确的方法吗?如果没有,正确的方法是什么?
我们在 2 个应用程序中使用以下解决方案。
将配置变量存储在https://github.com/railsjedi/rails_config gem的 yml 文件中。
应用程序被配置为通过初始化程序在生产和开发模式下使用不同的 yml 文件。
在生产服务器上,带有 yml 文件的目录与 2 个应用程序进行符号链接。
capistrano 的任务看起来是这样的:
namespace :settings do
task :symlink, roles: :app do
run "ln -s /path_to_settings/#{rail_env} #{current_path}/config/settings"
end
end
after "deploy:create_symlink", "settings:symlink"