如何通过capistrano 3运行自定义rake任务?

kpb*_*blc 12 ruby rake capistrano ruby-on-rails capistrano3

哪种方式,我可以通过远程服务器上的capistrano运行rake命令.

例如,我有lib/task/reparse.rake一些方法

desc "it's take csv file, makes some changes and fill db with this info"
task :example1 => :environment do
  require 'csv'
  rows_to_insert = []
  # some actions
  # ...
end
Run Code Online (Sandbox Code Playgroud)

在本地服务器上一切都很好 - 我只是运行rake reparse:example1 它的工作(正确填充数据库).所以问题是 - 如何在部署后在真实主机上运行此命令?

我使用rails 4.1 + capistrano 3.

来自网站的PS示例不适用于我 如何从Capistrano运行rake任务?

如果我尝试cap production rake:invoke task=reparse:land 失败的话:

cap aborted!
Don't know how to build task 'rake:invoke'
Run Code Online (Sandbox Code Playgroud)

一些修复

namespace :somenamespace do
  task :runrake do  
    on roles(:all), in: :sequence, wait: 5 do      
      within release_path do
        execute :rake, ENV['task'], "RAILS_ENV=production"
      end 
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

用这种方式开始执行

cap production somenamespace:runrake task=custom_task_file:custom_method1
Run Code Online (Sandbox Code Playgroud)

Kuk*_*nin 5

基于capistrano/railsgem:https://github.com/capistrano/rails/blob/master/lib/capistrano/tasks/migrations.rake

namespace :somenamespace do
  task :runrake do
    on roles(:all) do
      within release_path do
        with rails_env: fetch(:rails_env) do
          execute :rake, ask :task
        end
      end 
    end
  end
end
Run Code Online (Sandbox Code Playgroud)


Sem*_*jon 2

您需要在 Capistrano 配置中加载自定义 rake 任务:

# config/deploy.rb || config/deploy/production.rb
load 'lib/task/reparse.rake'
Run Code Online (Sandbox Code Playgroud)

在控制台中检查新任务cap -T