Saya sudah memiliki deploy.rb yang dapat menerapkan aplikasi saya di server produksi saya.
Aplikasi saya berisi tugas rake khusus (file .rake di direktori lib / tugas).
Saya ingin membuat tugas batas yang akan menjalankan tugas menyapu itu dari jarak jauh.
ruby
rake
capistrano
Richard Poirier
sumber
sumber
#{rake}
variabel capistrano sendiri ? Sepertinya itu tidak selalu merupakan pilihan terbaik.Jawaban:
Sedikit lebih eksplisit, di Anda
\config\deploy.rb
, tambahkan di luar tugas atau namespace apa pun:Kemudian, dari
/rails_root/
, Anda dapat menjalankan:sumber
... beberapa tahun kemudian ...
Lihatlah plugin rel capistrano, Anda dapat melihat di https://github.com/capistrano/rails/blob/master/lib/capistrano/tasks/migrations.rake#L5-L14 itu bisa terlihat seperti:
sumber
run
akan berfungsi pada capistrano hingga versi 2. dari versi 3 ini adalah cara yang harus dilakukan.Capistrano 3 Generic Version (menjalankan tugas menyapu)
Membangun versi generik dari jawaban Mirek Rusin:
Contoh penggunaan:
cap staging "invoke[db:migrate]"
Perhatikan bahwa kebutuhan
deploy:set_rails_env
berasal dari permata capistrano-railssumber
rake args[:command]
denganexecute :rake, "#{args.command}[#{args.extras.join(",")}]"
Anda dapat menjalankan tugas dengan beberapa argumen seperti:cap production invoke["task","arg1","arg2"]
cap staging invoke['task[arg1\,arg2]']
. Saya lebih suka pendekatan ini daripada yang Anda sebutkan karena ini mencerminkan permintaan rake yang sebenarnya. Dengan pendekatan ini Anda juga dapat rantai beberapa tugas, yang sering berguna:cap staging invoke['task1 task2[arg1] task3[arg2\,arg3]']
. Berfungsi untuk rake 10.2.0 atau yang lebih baruMenemukannya dengan Google - http://ananelson.com/said/on/2007/12/30/remote-rake-tasks-with-capistrano/
Itu
RAILS_ENV=production
adalah gotcha - saya tidak memikirkannya pada awalnya dan tidak tahu mengapa tugas itu tidak melakukan apa-apa.sumber
"cd #{deploy_to}/current && #{rake} <task_name> RAILS_ENV=production"
Gunakan doa rake gaya Capistrano
Ada cara umum yang akan "berfungsi" dengan
require 'bundler/capistrano'
dan ekstensi lain yang mengubah penggaruk. Ini juga akan bekerja dengan lingkungan praproduksi jika Anda menggunakan multistage. Intinya? Gunakan config vars jika Anda bisa.sumber
top.run
alih-alih hanyarun
top
metode tersebut . Dalam kasus di mana kita telah mendefinisikanrun
di namespace yang sama,top.run
diperlukan, jika tidak, ia masih harus menemukan tingkat atasrun
bahkan di mana tugas diberi ruang nama. Apakah saya melewatkan sesuatu? Apa yang terjadi dalam kasus Anda?Gunakan
capistrano-rake
permata ituCukup instal permata tanpa mengotak-atik resep capistrano khusus dan jalankan tugas rake yang diinginkan di server jarak jauh seperti ini:
Pengungkapan Penuh: Saya menulisnya
sumber
Saya pribadi menggunakan metode pembantu dalam produksi seperti ini:
Itu memungkinkan untuk menjalankan tugas rake mirip dengan menggunakan metode run (perintah).
CATATAN: Ini mirip dengan apa yang diusulkan Duke , tetapi saya:
sumber
Ada jubah permata menarik yang membuat tugas penggaruk Anda tersedia sebagai tugas Capistrano, sehingga Anda dapat menjalankannya dari jarak jauh.
cape
didokumentasikan dengan baik, tetapi berikut adalah ikhtisar singkat tentang cara menyiapkan saya.Setelah menginstal permata, cukup tambahkan ini ke
config/deploy.rb
file Anda .Sekarang, Anda dapat menjalankan semua
rake
tugas Anda secara lokal atau jarak jauhcap
.Sebagai bonus tambahan,
cape
memungkinkan Anda mengatur bagaimana Anda ingin menjalankan tugas rake Anda secara lokal dan jarak jauh (tidak lebihbundle exec rake
), cukup tambahkan ini keconfig/deploy.rb
file Anda :sumber
sumber
RAILS_ENV=production
menjadiRAILS_ENV=#{rails_env}
memungkinkannya berfungsi di server pementasan saya juga.Inilah yang saya masukkan ke deploy.rb saya untuk menyederhanakan menjalankan tugas rake. Ini adalah pembungkus sederhana di sekitar metode run () capistrano.
Lalu saya hanya menjalankan tugas menyapu seperti ini:
sumber
Ini berhasil untuk saya:
Lalu lari saja
cap production "invoke[task_name]"
sumber
Sebagian besar berasal dari jawaban di atas dengan sedikit peningkatan untuk menjalankan tugas menyapu dari capistrano
Jalankan tugas menyapu apa pun dari capistrano
sumber
Ini juga berfungsi:
Info lebih lanjut: Capistrano Run
sumber
Jika Anda ingin dapat memberikan banyak argumen, coba ini (berdasarkan jawaban marinosbern):
Kemudian Anda dapat menjalankan tugas seperti ini:
cap production invoke["task","arg1","arg2"]
sumber
Jadi saya telah mengerjakan ini. itu jahitan untuk bekerja dengan baik. Namun, Anda memerlukan pemformat untuk benar-benar memanfaatkan kode tersebut.
Jika Anda tidak ingin menggunakan pemformat, cukup setel level log ke mode debug. Semas ini untuk h
Barang Topi
Ini adalah pemformat yang saya buat untuk bekerja dengan kode di atas. Ini didasarkan pada: teks sederhana yang dibangun ke dalam sshkit tetapi itu bukan cara yang buruk untuk menjalankan tugas khusus. Oh ini banyak yang tidak berfungsi dengan versi terbaru dari permata sshkit. Saya tahu ini berfungsi dengan 1.7.1. Saya mengatakan ini karena cabang master telah mengubah metode SSHKit :: Command yang tersedia.
sumber
Jawaban sebelumnya tidak membantu saya dan saya menemukan ini: Dari http://kenglish.co/run-rake-tasks-on-the-server-with-capistrano-3-and-rbenv/
untuk menjalankan tugas Anda, gunakan
Mungkin akan bermanfaat bagi seseorang
sumber