简体   繁体   中英

Don't know how to build task 'environment' When i deploy my app to vps in Capistrano task

I deployed my app to vps with capistrano. Everything works fine but only :environment task.

This is my code

namespace :deploy do

desc 'Clear memcache'
  task clear_memcache: :environment do
    on roles(:app) , in: :sequence, wait: 2 do
      ::Rails.cache.clear
      CACHE.flush
    end
  end

    after  :finishing,    :clear_memcache

end

But i always got this error.

#<RuntimeError: Don't know how to build task 'environment' (see --tasks)>

How can i fix this? Thanks!

I think you are mixing two concepts. A rake task and a capistrano task. Rake tasks do use the :environment subtask, whereas the capistrano ones don't. Capistrano tasks cannot (AFAIK) directly call ruby code in the context of the rails application on the server, this is what rake tasks do.

What you actually probably want is to define both a rake task to clear the cache and a capistrano task that will call the rake task on the deployment server.

Try these:

The rake task to clear the cache:

# put this in Rakefile or any other rake file under lib/tasks
desc 'Clear memcache'
task clear_memcache: :environment do
  ::Rails.cache.clear
  CACHE.flush
end

The capistrano task to call the rake on the server:

# config/deploy/production.rb
namespace :deploy do

  desc 'Clear memcache'
  task :clear_memcache do
    on roles(:app) , in: :sequence, wait: 2 do
      within release_path do
        with rails_env: fetch(:rails_env) do
          execute 'rake', 'clear_memcache'
        end
      end
    end
  end

  after  :finishing, :clear_memcache    
end

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM