1
votes

I am attempting to deploy my Rails 3.2.13 app using Capistrano.

I am using the asset pipeline, and so attempting to precompile assets during the deploy.

I am getting the following error: "Application has been already initialized." during the rake assets:precompile stage.

Here's the stack trace:

executing "cd -- /sites/beta.myapp.com/releases/20130905192243 && RAILS_ENV=beta RAILS_GROUPS=assets bundle exec rake assets:precompile" executing command rake aborted! Application has been already initialized. /sites/beta.myapp.com/shared/bundle/ruby/1.9.1/gems/railties-3.2.13/lib/rails/application.rb:135:in initialize!' /sites/beta.myapp.com/shared/bundle/ruby/1.9.1/gems/actionpack-3.2.13/lib/sprockets/assets.rake:95:in block (2 levels) in '

Tasks: TOP => assets:precompile:primary => assets:environment

Any ideas?

Here is my deploy.rb:

require "bundler/capistrano"
require 'capistrano/ext/multistage'
require "whenever/capistrano"
require './config/boot'
require 'airbrake/capistrano'

set :stages, %w(beta production)

set :application, "myapp...."
set :whenever_environment, defer { stage }
set :whenever_command, "bundle exec whenever"

set :user, "myuser...."
set :deploy_via, :remote_cache
set :use_sudo, false

set :scm, "git"
set :repository, "myrepo....."
set :branch, $1 if `git branch` =~ /\* (\S+)\s/m

namespace :deploy do
  task :cold do       # Overriding the default deploy:cold
    update
    load_schema       # My own step, replacing migrations.
    start
  end

  task :load_schema, :roles => :app do
    run "cd #{current_path}; rake db:schema:load RAILS_ENV=#{stage}"
  end

  desc "Tell Passenger to restart and restart workers."
  task :restart, :roles => :web do
    run "touch #{deploy_to}/current/tmp/restart.txt"
  end

  desc "Do nothing on startup so we don't get a script/spin error."
  task :start do
    puts "You may need to restart Apache."
  end

  desc "Symlink extra configs and folders."
  task :symlink_extras do
    run "ln -nfs #{shared_path}/config/database.yml #{latest_release}/config/database.yml"
    run "ln -nfs #{shared_path}/assets #{latest_release}/public/assets"
  end

  desc "Setup shared directory."
  task :setup_shared do
    run "mkdir #{shared_path}/assets"
    run "mkdir #{shared_path}/config"
    run "mkdir #{shared_path}/tmp"
    run "mkdir #{shared_path}/db"
    put File.read("config/examples/database.yml"), "#{shared_path}/config/database.yml"
    puts "Now edit the config files and fill assets folder in #{shared_path}."
  end

  desc "Seed the db with shipping options and a product"
  task :seed do
    run "cd #{current_path}; rake db:seed"
  end

  desc "Make sure there is something to deploy"
  task :check_revision, :roles => :web do
    unless `git rev-parse HEAD` == `git rev-parse origin/#{branch}`
      puts "WARNING: HEAD is not the same as origin/master"
      puts "Run `git push` to sync changes."
      exit
    end
  end

  desc "Stop resque Workers."
  task :stop_workers, :on_error => :continue do
    run "cd #{current_path} && rake resque:stop_workers RAILS_ENV=#{stage}"     
  end  
end

before "deploy", "deploy:check_revision"
after "deploy", "deploy:cleanup"
after "deploy:setup", "deploy:setup_shared"
before "deploy:assets:precompile", "deploy:symlink_extras"
after "deploy:update_code", "deploy:stop_workers"
1
can you show us your deploy.rb? Otherwise all we can do is give a wild guessfotanus
@fontanus --- I just added my deploy.rb as requested. Thanks.rlarcombe

1 Answers

2
votes

I eventually solved this problem:

In config/application.rb, I had to comment out the following line:

config.assets.initialize_on_precompile = true

I had tried setting config.assets.initialize_on_precompile both to false, and also to true... In both cased I got the "Application has been already initialized" error.

But, once I commented out the line altogether, I was able to get my app to deploy.