对rails,开源以及很快就可以部署到生产环境的新手,我有一些安全考虑因素。
如何处理database.yml,how-to-manage-rails-database-yml
非常好但是从我的观点来看,普通的rails应用程序中有更多的配置设置,不应该托管在公共github存储库中并部署到生产中,例如。
将.config / **** / *添加到.gitignore不仅会阻止来自 bundle install,db:create,db:migrate,rails server 的新开发人员,还会阻止生产配置到目前为止是否安装了带有初始化程序的新gem。
另一种可能性是使用敏感配置添加 environment.yml ,例如database.yml,其中初始化程序中的敏感配置将被覆盖?
这样可以在清理结账后轻松启动和运行,并且生产环境易于维护。
如何解决上述问题?
答案 0 :(得分:5)
我通常会在这些文件中放入“安全”数据,这通常可用于开发目的。但是在制作中我将文件符号链接到capistrano的另一个位置,如下所示:
invoke_command "ln -sf #{shared_path}/database.yml #{release_path}/config/database.yml"
因此在生产服务器中,我有一堆文件覆盖源代码管理中的文件。我甚至不使用database.yml.example
,只是开发人员同意在开发和测试中使用的一些合理的默认database.yml
。
对于个人设置,例如API密钥,我通常会创建一个config/settings.yml
并从初始化程序中读取它们:
SETTINGS = YAML.load(IO.read(Rails.root.join("config", "settings.yml")))
YourApp::Application.config.secret_token = SETTINGS["secret_token"]