My app is set up without database.yml in version control. I created a
shared_path/config dir, and put database.yml in it. After I update
the code, I want to link the app’s database.yml file to the shared
config. So I added this task
desc ‘Copy the database config’
task :after_update_code, :roles => :app do
run “ln -s #{shared_path}/config/database.yml
#{current_path}/config/database.yml”
end
Unfortunately that doesnt work, because update_code is in a
transaction, so current_path points to the app that’s currently
running, rather than the most recently checked out code version. So I
get the following error:
- executing task after_update_code
- executing “ln -s ~/apps/blog/shared/config/database.yml
~/apps/blog/current/config/database.yml”
servers: [“www.mydomain.com”]
[www.mydomain.com] executing command
** [out :: www.mydomain.com] ln:
/home/pergesu/apps/blog/current/config/database.yml: File exists
command finished
rake aborted!
command “ln -s ~/apps/blog/shared/config/database.yml
~/apps/blog/current/config/database.yml” failed on www.mydomain.com
In the past I’ve put the ln in the restart task, but that’s an ugly
hack, plus it doesn’t allow me to “rake remote:restart” - the file
already exists, so it fails. I have to do a full deploy just to
restart it. So how do I do what I want?
Finally, I have a question about running migrations. Does rake deploy
just do remote:update_code and remote:restart? Or does it do other
stuff? If I need to run migrations, it’d be best if I can update the
code, run migrations, and restart the app. “rake remote:update_code;
rake remote:migrate; rake remote:restart”, instead of what I’m
currently doing now chich is “rake deploy; rake remote:migrate; rake
remote:restart”
Thanks for any info.
Pat
Pat,
I’m afraid I can’t help with your other issues, but there is a
“deploy_with_migrations” task in the remote namespace.
rake remote:deploy_with_migrations
Jeff
Pat M. wrote:
My app is set up without database.yml in version control. I created a
shared_path/config dir, and put database.yml in it. After I update
the code, I want to link the app’s database.yml file to the shared
config. So I added this task
desc ‘Copy the database config’
task :after_update_code, :roles => :app do
run “ln -s #{shared_path}/config/database.yml
#{current_path}/config/database.yml”
end
Unfortunately that doesnt work, because update_code is in a
transaction, so current_path points to the app that’s currently
running, rather than the most recently checked out code version. So I
get the following error:
- executing task after_update_code
- executing “ln -s ~/apps/blog/shared/config/database.yml
~/apps/blog/current/config/database.yml”
servers: [“www.mydomain.com”]
[www.mydomain.com] executing command
** [out :: www.mydomain.com] ln:
/home/pergesu/apps/blog/current/config/database.yml: File exists
command finished
rake aborted!
command “ln -s ~/apps/blog/shared/config/database.yml
~/apps/blog/current/config/database.yml” failed on www.mydomain.com
In the past I’ve put the ln in the restart task, but that’s an ugly
hack, plus it doesn’t allow me to “rake remote:restart” - the file
already exists, so it fails. I have to do a full deploy just to
restart it. So how do I do what I want?
Finally, I have a question about running migrations. Does rake deploy
just do remote:update_code and remote:restart? Or does it do other
stuff? If I need to run migrations, it’d be best if I can update the
code, run migrations, and restart the app. “rake remote:update_code;
rake remote:migrate; rake remote:restart”, instead of what I’m
currently doing now chich is “rake deploy; rake remote:migrate; rake
remote:restart”
Thanks for any info.
Pat
Hey Jeff,
Thanks for the tip on deploy_with_migrations
I found out that I need to use release_path instead of current_path
inside after_update_code, because update_code doesn’t do any
symlinking. release_path is the path to the release that’s being
checked out.
Pat