Deployment problem after update to rails 3.2.1

Hi!

I updated my application from Rails 3.1.x to 3.2.1. I followed the update instructions in the Rails Guide which hardly requires any modifications apart from development mode. On my local machine - running development mode - the application is running fine using Ruby 1.9.3 with the mysql2 gem.

After deployment with Capistrano to the production server (running Rvm, Ruby 1.9.2) I get:

executing "cd ~/rails/releases/20120202145157 && bundle exec rake RAILS_ENV=production RAILS_GROUPS=assets assets:precompile"

    [server] executing command *** [err :: server] rake aborted! *** [err :: server Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2) *** [err :: server] *** [err :: server] Tasks: TOP => environment *** [err :: server] (See full trace by running task with --trace)

Before the update to Rails 3.2.1 all deployments went allright.

Any clues?

Can you check your database.yml?

/tmp/mysql.sock looks like a OSX location.. Wondering if you copied your dev properties to production?

Thanks for your reply!

That was my first thought as well so I checked the database.yml on the server. But what I forgot was that I was strugling with the repository in my new editor TextMate. So I had to check in all new files with my old editor thereby including the database.yml file as well..... which should not have happened as it is shared.

So now I got them out of the repository, did a export to check they are really gone. Checked the shared/config path on the server to see if they are still there and now on deployment I get this:

executing "cd ~/rails/releases/20120202180855 && bundle exec rake RAILS_ENV=production RAILS_GROUPS=assets assets:precompile"     servers: [""]      executing command *** [err :: ] rake aborted! *** [err :: No such file or directory - /var/www/vhosts/server/rails/ releases/20120202180855/config/database.yml

It looks like the symlink which is automatically applied by Capistrano does not get fired..... I'm out of ideas.

This may not be the symlink, but that the database.yml isn't deployed, and needs to be copied manually from an older version on the server, or from your own machine.

Your situation may differ, but I use capistrano to deploy from the SCM, so if it's not there, it's not going to make it to your server.

Yeah, but it's there! Refreshed my remote server and it's still there.

This is my deploy.rb part:

namespace :deploy do   task :start do ; end   task :stop do ; end   task :restart, :roles => :app, :except => { :no_release => true } do     run "#{try_sudo} touch #{File.join(current_path,'tmp','restart.txt')}"   end

  after "deploy:update_code", :link_production_db, 'dragonfly:symlink' end

desc "Link database.yml from shared path" task :link_production_db do   run "ln -nfs #{deploy_to}/#{shared_dir}/config/database.yml #{release_path}/config/database.yml"   run "ln -nfs #{deploy_to}/#{shared_dir}/config/email.yml #{release_path}/config/email.yml" end

And database.yml and email.yml are in /shared/config folder as they have always been.

But look at the Capistrano output: triggering after callbacks for `deploy:update_code'   * executing `deploy:assets:precompile'   * executing "cd ~/rails/releases/20120202183436 && bundle exec rake RAILS_ENV=production RAILS_GROUPS=assets assets:precompile"

It does not mention the symlink commands. It directly executes the Bundle command. I cannot remember it normally does.

Yeah, but it's there! Refreshed my remote server and it's still there.

Ah.. capistrano is great when it is working, isn't it :slight_smile:

Hopefully someone else can help more; you might try the capistrano list.

Ha ha, yeah it is.

Just checked with another project and it should run the after_update_code callbacks first! But it isn't. Same Capistrano version....

I will seek some Capistrano help. Thanks so far!

Hey, hopefully you figured this out already but I was stuck on this issue as well, and the solution's pretty simple. You have to make sure that the "database.yml" file is in the git or scm tool repository that you're using.

    I think capistrano is trying to pull the database.yml file from the repository and not any physical location on the deployment server. Sometimes when you're working with people you .gitignore the database.yml file but just make sure you "git add -f" the database.yml file then commit and push it. Then try cap deploy/cap deploy:update and hopefully it works!

Good luck and I hope this helps.

In general, this does not seem to be the optimal solution. I would not

advise to store the production passwords in the version control system

As Capistrano does it by default, link to files in /shared/config, seems

a lot better for the production passwords.

HTH,

Peter