如何管理Rails database.yml

时间:2009-09-19 23:51:46

标签: mysql ruby-on-rails svn

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

5 个答案:

答案 0 :(得分: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"

第三,安装Where's your database.yml, dude?

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

如果没有创建自己的config/database.yml本地版本,该插件会在开发任何Rake任务之前向开发人员发出警告。

第四,设置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

答案 1 :(得分:16)

在Capistrano 3中,您可以这样做,而不是添加新任务:

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

答案 2 :(得分:2)

您可以使用svn:ignore属性来阻止该文件的版本化。

Instructions here.

答案 3 :(得分:2)

另一种使用capistrano和ERb在部署期间提示凭据的方法。

http://www.simonecarletti.com/blog/2009/06/capistrano-and-database-yml/

答案 4 :(得分:0)

除了上面的答案之外,我写了一个rake任务,类似于“你的database.yml,dude?”,但允许保留任何配置文件的模板示例。看看:https://github.com/Velid/exemplify

作为编写单独生产配置并通过Capistrano链接它们的替代方法,我还建议使用环境变量作为凭证:

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

有许多handy toolsways可以执行此操作。