Rails 環境で非同期処理を行いたいです
そのために delayed_job という Gem を導入しようとしていて
開発環境では動作したのですがステージング以降のサーバーで自動起動するための
capistorano の設定がうまくいかずに困っています
AgileConsultingLLC /
capistrano3-delayed-job
こちらを参考にして
Gemfile に以下を追加
gem 'capistrano3-delayed-job'
Capfile に
require 'capistrano/delayed_job'
とかいて deploy.rb にはなにも追記せず設定はすべてデフォルトのまま
bundle exec cap staging deploy
を実行したところ bin/delaed_job コマンドが存在しないというエラーでとまってしまいます
エラーメッセージで調べてみると
bundle exec rails g delayed_job をしろという記事がたくさんでてくるんですが
それを capistorano の中でやる方法が知りたくて、唯一
Rails 4, capistrano 3, delayed_job - ne peut pas trouver bin/delayed_job sur l'un des serveurs
こちらのサイトにデプロイ時になかったら生成するタスクの書き方が乗ってたので
namespace :delayed_job do desc "Install Deployed Job executable if needed" task :install do on roles(delayed_job_roles) do |host| within release_path do # Only install if not already present unless test("[ -f #{release_path}/#{delayed_job_bin} ]") with rails_env: fetch(:rails_env) do execute :bundle, :exec, :rails, :generate, :delayed_job end end end end end before :start, :install before :restart, :install end
こちらの設定を deploy.rb に追記してみたところ
capistorano 内で rails generate delayed_job が実行されたのですが
Using: rails new APP_PATH :
となって rails generate が動かないようです
直接サーバーに入って
/var/www/current/ で bundle exec rails generate delayed_job を実行しても同じメッセージが出て実行できません
開発環境で同じコマンドをたたくと
# bundle exec rails generate delayed_job Running via Spring preloader in process 14519 identical bin/delayed_job chmod bin/delayed_job
となって生成されます
capistorano のタスクが途中で中断されてしまったせいなんだと思いますが
rails generate が
Using: rails new APP_PATH
となってしまう原因と修正方法のわかる方いらっしゃったら助けていただきたいです
rails generate を RAILS_ROOT 以外で実行するとこのメッセージが出ることはわかるんですが
何をみて rails コマンドが RAILS_ROOT を判断してるんでしょうか
delayed_job にこだわっているわけではないので
Rails でコントローラから起動する非同期処理がしたい
こちらの質問と合わせて rails 環境からはまりどころなしに使える非同期処理があればあわせて教えていただけると助かります
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2020/07/07 02:59