如何管理Rails database.yml


82

如果多个人在项目上工作并且数据库位置不同(特别是套接字),那么处理Rails database.yml的最佳方法是什么。


2
澄清:我想与Capistrano一起使用,Capistrano可以从svn中退出,所以我认为忽略不了。
菲利普

1
对于Capistrano案,我又增加了两个步骤。
詹姆斯·罗森

Answers:


160

首先,移至database.yml模板文件。

如果您使用的是Git:

git mv config/database.yml config/database.yml.example
git commit -m "moved database.yml to an example file"

或者,如果您使用Subversion:

svn move config/database.yml config/database.yml.example
svn ci -m "moved database.yml to an example file"

其次,忽略.yml版本。

如果您使用的是Git:

cat > .gitignore
config/database.yml

git add .gitignore
git commit -m "ignored database.yml"

如果您使用Subversion:

svn propset svn:ignore config "database.yml"

第三,安装您的database.yml在哪里,老兄?

script/plugin install git://github.com/technicalpickles/wheres-your-database-yml-dude

如果开发人员尚未创建自己的本地版本,该插件会在运行Rake任务之前提醒开发人员config/database.yml

第四,设置Capistrano部署任务:

# in RAILS_ROOT/config/deploy.rb:
after 'deploy:update_code', 'deploy:symlink_db'

namespace :deploy do
  desc "Symlinks the database.yml"
  task :symlink_db, :roles => :app do
    run "ln -nfs #{deploy_to}/shared/config/database.yml #{release_path}/config/database.yml"
  end
end

第五,上传服务器版本的database.yml:

scp config/database.yml user@my_server.com:/path_to_rails_app/shared/config/database.yml

8
“接受”您认为最有帮助的答案是惯例(尽管不是必须的)。我认为您甚至可以为首次接受获得徽章。
James A. Rosen

3
我的坏人-投票通过,但没有看到支票。做完了,谢谢!
菲利普

我必须将'deploy:update_code','deploy:symlink_db'之后更改为'deploy:assets:precompile','deploy:symlink_db'之前,然后才能正常工作。
joshua.paling

一切正常,除了第五步。它说没有这样的目录,但是在那里。
Sebastialonso

只是重要的提示,我建议cat >> .gitignore改为使用。因为否则您将吹走现有文件...
sijpkes '16

16

在Capistrano 3中,您可以执行以下操作,而不是添加新任务:

set :linked_files, %w{config/database.yml}



0

除了上述答案之外,我还编写了一个类似于“ Where's your database.yml,老兄?”的rake任务,但是允许保留任何配置文件的模板示例。看看:https : //github.com/Velid/exemplify

除了编写单独的生产配置并通过Capistrano链接它们之外,我还建议使用环境变量作为凭据:

password: <%= ENV['PROD_DATABASE_PASSWORD'] %>

周围有很多方便的 工具方法

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.