Mam już plik deploy.rb, który może wdrożyć moją aplikację na serwerze produkcyjnym.
Moja aplikacja zawiera niestandardowe zadanie prowizji (plik .rake w katalogu lib / jobs).
Chciałbym utworzyć zadanie cap, które będzie zdalnie uruchamiało to zadanie rake.
ruby
rake
capistrano
Richarda Poiriera
źródło
źródło
#{rake}
zmiennej Capistrano ? Wydaje się, że nie zawsze jest to najlepsza opcja.Odpowiedzi:
Nieco bardziej wyraźne, w swoim
\config\deploy.rb
, dodaj poza jakimkolwiek zadaniem lub przestrzenią nazw:Następnie
/rails_root/
możesz uruchomić:źródło
... kilka lat później ...
Spójrz na wtyczkę rails capistrano, możesz zobaczyć na https://github.com/capistrano/rails/blob/master/lib/capistrano/tasks/migrations.rake#L5-L14 może wyglądać mniej więcej tak:
źródło
run
będzie działać na capistrano do wersji 2. od wersji 3 to jest droga.Capistrano 3 Generic Version (uruchom dowolne zadanie rake)
Tworzenie ogólnej wersji odpowiedzi Mirka Rusina:
Przykładowe użycie:
cap staging "invoke[db:migrate]"
Zauważ, że
deploy:set_rails_env
wymagania pochodzą z klejnotu capistrano-railsźródło
rake args[:command]
zexecute :rake, "#{args.command}[#{args.extras.join(",")}]"
was może wykonywać zadania z wieloma argumentami tak:cap production invoke["task","arg1","arg2"]
cap staging invoke['task[arg1\,arg2]']
. Wolę to podejście od tego, o którym wspominasz, ponieważ odzwierciedla faktyczne wywołanie rake. Dzięki takiemu podejściu można również łańcuch wielu zadań, które często przydatne:cap staging invoke['task1 task2[arg1] task3[arg2\,arg3]']
. Działa dla rake'a 10.2.0 lub nowszegoZnalazłem go w Google - http://ananelson.com/said/on/2007/12/30/remote-rake-tasks-with-capistrano/
To
RAILS_ENV=production
był problem - na początku o tym nie pomyślałem i nie mogłem zrozumieć, dlaczego zadanie nic nie robi.źródło
"cd #{deploy_to}/current && #{rake} <task_name> RAILS_ENV=production"
Użyj wywołań prowizji w stylu Capistrano
Istnieje powszechny sposób, który „po prostu działa” z
require 'bundler/capistrano'
innymi rozszerzeniami, które modyfikują rake. Będzie to również działać w środowiskach przedprodukcyjnych, jeśli korzystasz z wielu etapów. Istota? Jeśli możesz, użyj zmiennych konfiguracyjnych.źródło
top.run
zamiast po prosturun
top
metody . W przypadku, gdy zdefiniowaliśmyrun
w tej samej przestrzeni nazw,top.run
jest to wymagane, w przeciwnym razie nadal powinno znaleźć najwyższy poziom,run
nawet jeśli zadanie ma przestrzeń nazw. Czy coś przegapiłem? Co się stało w twoim przypadku?Użyj
capistrano-rake
klejnotuPo prostu zainstaluj klejnot bez mieszania niestandardowych receptur Capistrano i wykonaj żądane zadania rake na zdalnych serwerach, takie jak ten:
Pełne ujawnienie: napisałem to
źródło
Osobiście używam w produkcji takiej metody pomocniczej:
Pozwala to na uruchomienie zadania rake podobnie jak przy użyciu metody run (polecenie).
UWAGA: jest podobny do tego, co zaproponował Duke , ale ja:
źródło
Istnieje interesująca peleryna z klejnotami, która sprawia, że zadania rake są dostępne jako zadania Capistrano, więc możesz je uruchamiać zdalnie.
cape
jest dobrze udokumentowany, ale oto krótki przegląd tego, jak go skonfigurować.Po zainstalowaniu klejnotu po prostu dodaj go do swojego
config/deploy.rb
pliku.Teraz możesz uruchamiać wszystkie swoje
rake
zadania lokalnie lub zdalniecap
.Jako dodatkowy bonus
cape
pozwala ustawić, w jaki sposób chcesz uruchamiać zadanie prowizji lokalnie i zdalnie (nie więcejbundle exec rake
), po prostu dodaj to do swojegoconfig/deploy.rb
pliku:źródło
źródło
RAILS_ENV=production
naRAILS_ENV=#{rails_env}
umożliwia działanie również na moim serwerze pomostowym.Oto, co umieściłem w pliku deploy.rb, aby uprościć wykonywanie zadań rake. Jest to proste opakowanie wokół metody run () capistrano.
Następnie po prostu uruchamiam takie zadanie rake'u:
źródło
To zadziałało dla mnie:
Następnie po prostu biegnij
cap production "invoke[task_name]"
źródło
Większość z nich pochodzi z powyższej odpowiedzi z niewielkim ulepszeniem, aby uruchomić dowolne zadanie rake z capistrano
Uruchom dowolne zadanie prowizji od Capistrano
źródło
Działa to również:
Więcej informacji: Capistrano Run
źródło
Jeśli chcesz mieć możliwość przekazywania wielu argumentów, spróbuj tego (w oparciu o odpowiedź marinosbern):
Następnie możesz uruchomić takie zadanie:
cap production invoke["task","arg1","arg2"]
źródło
Więc pracowałem nad tym. wydaje się działać dobrze. Jednak potrzebujesz formatera, aby naprawdę wykorzystać kod.
Jeśli nie chcesz używać programu formatującego, po prostu ustaw poziom dziennika na tryb debugowania. Te semestry do h
Cap Stuff
To jest formater, który zbudowałem do pracy z powyższym kodem. Opiera się na: textimple wbudowanym w sshkit, ale nie jest to zły sposób wywoływania zadań niestandardowych. Och, to wiele nie działa z najnowszą wersją klejnotu sshkit. Wiem, że działa z 1.7.1. Mówię to, ponieważ gałąź główna zmieniła dostępne metody SSHKit :: Command.
źródło
Poprzednie odpowiedzi nie pomogły mi i znalazłem to: Z http://kenglish.co/run-rake-tasks-on-the-server-with-capistrano-3-and-rbenv/
do uruchomienia zadania użyj
Może komuś się przyda
źródło