2014-05-23 11 views
12

hangi yoldan, uzak sunucuda capistrano üzerinden komisyon komutları çalıştırabilirim. (Doğru db doldurun) ben sadece rake reparse:example1 çalıştırmak ve bir iş -Özel rake görevi capistrano 3 üzerinden nasıl çalıştırılır?

örneğin ben hepsi iyi yerel sunucuda bazı yöntemlerin

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 

ile lib/task/reparse.rake var. öyleyse soru - bu komutu, dağıtıldıktan sonra gerçek barındırmada nasıl çalıştırabilirim?

i'am kullanarak raylar 4.1 + capistrano 3.

Not; sitesinden örnekler için çalışmaz beni How do I run a rake task from Capistrano?

ben ile başarısız cap production rake:invoke task=reparse:land denerseniz: o

aracılığıyla çalıştırmaya başlar

cap aborted! 
Don't know how to build task 'rake:invoke' 

bazı düzeltmeler

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 

böyle bir yol

cap production somenamespace:runrake task=custom_task_file:custom_method1 
+1

Özür dilerim, cevabı iyice okumamışım: P - Bir capistrano görevi eklemeyi denediniz? Execute: rake, ENV ['task'] '? –

+0

@UriAgassi thx yorum için, bazı düzeltmeler yapın ve soruya ekleyin) – kpblc

+0

Şimdi çalışıyor? –

cevap

5

cap -T belirli bir komisyon görevini çalıştırmak için karşılık gelen bir capistrano görevi:

namespace :guests do 
    desc 'Remove guest users older than 7 days' 
    task :clean do 
    on roles(:app) do 
     within release_path do 
     with rails_env: fetch(:rails_env) do 
      execute :rake, 'guests:delete_old_guest_users' 
     end 
     end 
    end 
    end 
end 
+0

Teşekkürler! Bunu nasıl çalıştıracağınızı gösteren örnek bir komut satırı ekleyebilir misiniz? – gmcnaughton

2

oluşturabilir: konsolunda yeni görev için

# config/deploy.rb || config/deploy/production.rb 
load 'lib/task/reparse.rake' 

çek capistrano/rails mücevher dayanarak

+0

teşekkürler de bu şekilde deneyeceğim – kpblc

3

Bu yüzden üzerinde çalışıyorum. iyi çalışmak için dikişler. Ancak, koddan gerçekten yararlanmak için bir formere ihtiyacınız var.

Biçimlendirici kullanmak istemiyorsanız, günlük düzeyini hata ayıklama moduna geçirmeniz yeterlidir.

SSHKit.config.output_verbosity = Logger::DEBUG 

Cap Stuff

namespace :invoke do 
    desc 'Run a bash task on a remote server. cap environment invoke:bash[\'ls -la\'] ' 
    task :bash, :execute do |_task, args| 
    on primary :app do 
     within deploy_to do 
     with rails_env: fetch(:rails_env) do 
      SSHKit.config.format = :supersimple 
      execute args[:execute] 
     end 
     end 
    end 
    end 

    desc 'Run a rake task on a remote server. cap environment invoke:rake[\'db:migrate\'] ' 
    task :rake, :task do |_task, args| 
    on primary :app do 
     within current_path do 
     with rails_env: fetch(:rails_env) do 
      SSHKit.config.format = :supersimple 
      rake args[:task] 
     end 
     end 
    end 
    end 
end 

Bu benim Yukarıdaki kod ile çalışmak için inşa biçimlendirici olduğunu. Sshkit içine yerleştirilmiş textsimple ama özel görevleri çağırmak için kötü bir yol değildir. Bu pek çok sshkit gem'in en yeni sürümü ile çalışmıyor. Bunun 1.7.1 ile çalıştığını biliyorum. Bunu söylüyorum çünkü ana dal SSHKit :: Komut yöntemlerini değiştirdi.

module SSHKit 
    module Formatter 
    class SuperSimple < SSHKit::Formatter::Abstract 
     def write(obj) 
     case obj 
     when SSHKit::Command then write_command(obj) 
     when SSHKit::LogMessage then write_log_message(obj) 
     end 
     end 
     alias :<< :write 

     private 

     def write_command(command) 
     unless command.started? && SSHKit.config.output_verbosity == Logger::DEBUG 
      original_output << "Running #{String(command)} #{command.host.user ? "as #{command.host.user}@" : "on "}#{command.host}\n" 
      if SSHKit.config.output_verbosity == Logger::DEBUG 
      original_output << "Command: #{command.to_command}" + "\n" 
      end 
     end 

     unless command.stdout.empty? 
      command.stdout.lines.each do |line| 
      original_output << line 
      original_output << "\n" unless line[-1] == "\n" 
      end 
     end 

     unless command.stderr.empty? 
      command.stderr.lines.each do |line| 
      original_output << line 
      original_output << "\n" unless line[-1] == "\n" 
      end 
     end 

     end 

     def write_log_message(log_message) 
     original_output << log_message.to_s + "\n" 
     end 
    end 
    end 
end 
+1

3.5.0 capistrano ile çalışmaz. Onlar airbrussh gitti – Brandt

+1

Daha fazla bilgi at at https://github.com/mattbrictson/airbrussh In deploy.rb set: format,: airbrussh – shakaran

0

, özel capistrano görevleri ile karıştırmasını veya çok detaya girmeden sadece mücevher yüklemek yapmanız gereken tüm capistrano-rake

deneyin ve bunun gibi uzak sunuculardaki tırmık görevleri yürütme başlayabilirsiniz:

$ cap production invoke:rake TASK=some:rake_task 
İlgili konular