【发布时间】:2009-09-19 23:51:46
【问题描述】:
如果多个人在处理项目并且数据库位置不同(尤其是套接字),那么处理 Rails database.yml 的最佳方法是什么。
【问题讨论】:
-
澄清:我希望它与 Capistrano 一起使用,它从 svn 中签出,所以我认为忽略不工作。
-
我为 Capistrano 案例增加了两个步骤。
标签: mysql ruby-on-rails svn
如果多个人在处理项目并且数据库位置不同(尤其是套接字),那么处理 Rails database.yml 的最佳方法是什么。
【问题讨论】:
标签: mysql ruby-on-rails svn
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"
如果你在 Git 上:
cat > .gitignore
config/database.yml
git add .gitignore
git commit -m "ignored database.yml"
如果您使用的是 Subversion:
svn propset svn:ignore config "database.yml"
script/plugin install git://github.com/technicalpickles/wheres-your-database-yml-dude
如果开发人员尚未创建自己的本地版本 config/database.yml,该插件会在运行任何 Rake 任务之前提醒开发人员。
# 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
scp config/database.yml user@my_server.com:/path_to_rails_app/shared/config/database.yml
【讨论】:
cat >> .gitignore 代替。因为否则你会毁掉你现有的文件......
在 Capistrano 3 中,无需添加新任务,您只需执行以下操作:
set :linked_files, %w{config/database.yml}
【讨论】:
您可以使用 svn:ignore 属性来防止该文件被版本控制。
【讨论】:
在部署期间使用 capistrano 和 ERb 提示输入凭据的另一种方法。
http://www.simonecarletti.com/blog/2009/06/capistrano-and-database-yml/
【讨论】:
除了上述答案之外,我还编写了一个类似于“你的 database.yml 呢,伙计?”的 rake 任务,但允许保留任何配置文件的模板示例。看看吧:https://github.com/Velid/exemplify
作为编写单独的生产配置并通过 Capistrano 链接它们的替代方法,我还建议为您的凭据使用环境变量:
password: <%= ENV['PROD_DATABASE_PASSWORD'] %>
【讨论】: