Setting up staging server - setting environment

Hi,
I thought it would be easy to get a staging server working. I’m using
capistrano 2 and the ext gem. I already had everything working with
capistrano for a production deployment…

I added this to my deploy.rb
require ‘capistrano/ext/monitor’
require ‘capistrano/ext/multistage’

I created a /deploy/staging.rb
set :deploy_to, “/where-the-staging-stuff-goes”
set :rails_env, ‘staging’

I added a “:staging” section in my database.yml file which is the same
as production section but points to a different database

Most of this is working. The deployment works and I can run the app at
the new location, but for some reason it continues to use the production
database rather than the staging one that I have pointed it to with the
staging section of my database.yml file.

thanks for any words of wisdom on this.

jp

Hi Jeff,

Within your config/deploy/staging.rb file something like the following
could help:

require ‘erb’

before “deploy:setup”, :db
after “deploy:update_code”, “db:symlink”

namespace :db do
desc “Create database yaml in shared path”
task :default do
db_config = ERB.new <<-EOF
staging:
adapter: mysql
encoding: utf8
username: #{user}
password: #{password}
database: #{application}_staging
EOF

 run "mkdir -p #{shared_path}/config"
 put db_config.result, "#{shared_path}/config/database.yml"

end

desc “Make symlink for database yaml”
task :symlink do
run “ln -nfs #{shared_path}/config/database.yml #{release_path}/
config/database.yml”
end
end

Regards,
Keith

Hi Jeff,

Sorry if I’ve created a red herring for you. What I’ve provided
probably won’t solve your problem but it would keep your database
username and password more secure.

Getting back to your problem, have you set up config/environments/
staging.rb including ENV[‘RAILS_ENV’] = ‘staging’?

Keith

Hi Keith,
I appreciate the help, but you’ve left me a bit confused. If I read
this right, your addition is just going to add a staging section into
the database.yml file on the fly during the deploy setup. Seems easier
to just add it in for real. Please explain what/why.

thanks much,
jp

Keith P. wrote:

Hi Jeff,

Within your config/deploy/staging.rb file something like the following
could help:

require ‘erb’

before “deploy:setup”, :db
after “deploy:update_code”, “db:symlink”

namespace :db do
desc “Create database yaml in shared path”
task :default do
db_config = ERB.new <<-EOF
staging:
adapter: mysql
encoding: utf8
username: #{user}
password: #{password}
database: #{application}_staging
EOF

 run "mkdir -p #{shared_path}/config"
 put db_config.result, "#{shared_path}/config/database.yml"

end

desc “Make symlink for database yaml”
task :symlink do
run “ln -nfs #{shared_path}/config/database.yml #{release_path}/
config/database.yml”
end
end

Regards,
Keith

Hi Keith,
Yes, I managed to get it working just a moment ago. This is indeed what
was missing.

thanks,
jp

Keith P. wrote:

Hi Jeff,

Sorry if I’ve created a red herring for you. What I’ve provided
probably won’t solve your problem but it would keep your database
username and password more secure.

Getting back to your problem, have you set up config/environments/
staging.rb including ENV[‘RAILS_ENV’] = ‘staging’?

Keith

In your deploy.rb you should have something like this:

require ‘capistrano/ext/multistage’
set :stages, %w(production staging)
set :default_stage, “”

Then when you call capistrano:

cap staging deploy

Note: In :stages you should write the filename (without extension) of
your deploy/*.rb files

Jeff P. escribió:

set :deploy_to, “/where-the-staging-stuff-goes”
thanks for any words of wisdom on this.

jp


Rafael Garcia Ortega