When I start
cap production deploy
it fails like this:
DEBUG [4ee8fa7a] Command: cd /home/deploy/myapp/releases/releases/20131025212110 && (RVM_BIN_PATH=~/.rvm/bin RAILS_ENV= ~/.rvm/bin/myapp_rake assets:precompile )
DEBUG [4ee8fa7a] rake aborted!
DEBUG [4ee8fa7a] database configuration does not specify adapter
You can see that "RAILS_ENV=" is actually empty and I'm wondering why that might be happening? I assume that this is the reason for the latter error that I don't have a database configuration.
The deploy.rb file is below:
set :application, 'myapp'
set :repo_url, 'git@github.com:developer/myapp.git'
set :branch, :master
set :deploy_to, '/home/deploy/myapp/releases'
set :scm, :git
set :devpath, "/home/deploy/myapp_development"
set :user, "deploy"
set :use_sudo, false
set :default_env, { rvm_bin_path: '~/.rvm/bin' }
set :keep_releases, 5
namespace :deploy do
desc 'Restart application'
task :restart do
on roles(:app), in: :sequence, wait: 5 do
# Your restart mechanism here, for example:
within release_path do
execute " bundle exec thin restart -O -C config/thin/production.yml"
end
end
end
after :restart, :clear_cache do
on roles(:web), in: :groups, limit: 3, wait: 10 do
within release_path do
end
end
end
after :finishing, 'deploy:cleanup'
end
Database.yml:
production:
adapter: mysql2
encoding: utf8
database: myapp_production
pool: 5
username: user
password: pass
host: localhost
development:
adapter: mysql2
encoding: utf8
database: myapp_development
pool: 5
username: user
password: pass
host: localhost
The issue is resolved if I add
set :rails_env, "production"
to my deploy.rb, but this looks like hardcoding to me and I'm sure there's a nicer solution.
Seems to be a bug in capistrano-rails.
There is a task (rails.rake) that sets the environment either from rails_env or stage:
But this task isn't called before i.e. assets:precompile. So this:
fails because rails_env is nil if it isn't set explicitly.
If I have the time to dig a little deeper I'll file a bug report.
If you're using passenger, you need to add
in the in web server's (eg: nginx) .conf where you've specified values for
passenger_ruby
andpassenger_root
.Using Cap 3 and
capistrano_rails
on rails 4 I was getting the same error; in the environment file(s) being deployed, I setDoc here: https://github.com/capistrano/rails
Based on Marc's answer which definitely seems to be the right one,
you can workaround this until it is fixed upstream by adding this to your config/deploy.rb in the "namespace :deploy" block:
This will force loading the env and provisionning RAILS_ENV before assets:precompile is called.
Edit: Per this pull request, it's now fixed in version
1.1.0
ofcapistrano-rails
.Per this Github issue, another fix is to edit your
Capfile
. Comment out these two linesand put this line in
which will correctly set your
RAILS_ENV
variable.What happens if you add a file:
With this line: