What's the best way to handle the Rails database.yml if multiple people are working on the project and database locations are different (the socket in particular).
问题:
回答1:
First, move database.yml
to a template file.
If you're on Git:
git mv config/database.yml config/database.yml.example git commit -m "moved database.yml to an example file"
Or, if you're on Subversion:
svn move config/database.yml config/database.yml.example svn ci -m "moved database.yml to an example file"
Second, ignore the .yml version.
If you're on Git:
cat > .gitignore config/database.yml git add .gitignore git commit -m "ignored database.yml"
If you're on Subversion:
svn propset svn:ignore config "database.yml"
Third, install Where's your database.yml, dude?:
script/plugin install git://github.com/technicalpickles/wheres-your-database-yml-dude
That plugin alerts developers before any Rake tasks are run if they haven't created their own local version of config/database.yml
.
Fourth, set up a Capistrano deploy task:
# 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
Fifth, upload the server's version of database.yml:
scp config/database.yml user@my_server.com:/path_to_rails_app/shared/config/database.yml
回答2:
In Capistrano 3, instead of adding the new task, you can just do:
set :linked_files, %w{config/database.yml}
回答3:
You can use the svn:ignore property to prevent that file from being versioned.
回答4:
Yet another method that uses capistrano an ERb to prompt for the credentials during deployment.
http://www.simonecarletti.com/blog/2009/06/capistrano-and-database-yml/
回答5:
In addition to above answers, I wrote a rake task similar to "Where's your database.yml, dude?", but allowing to keep template examples of any configuration file. Check it out: https://github.com/Velid/exemplify
As an alternative to writing separate production configs and linking them via Capistrano, I would also suggest using environment variables for your credentials:
password: <%= ENV['PROD_DATABASE_PASSWORD'] %>
There are a lot of handy tools and ways to do this available around.