質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Capistrano

Rubyで書かれたサーバオーケストレーションで、複数のサーバでスクリプトを実行する際に用いられます。主な使用用途はWebアプリケーションのデプロイメントです。 アプリケーションのバージョンアップ自動化、およびデータベースの変更などもできます。

Q&A

解決済

1回答

920閲覧

rails generate が RAILS_ROOT を認識する条件

退会済みユーザー

退会済みユーザー

総合スコア0

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Capistrano

Rubyで書かれたサーバオーケストレーションで、複数のサーバでスクリプトを実行する際に用いられます。主な使用用途はWebアプリケーションのデプロイメントです。 アプリケーションのバージョンアップ自動化、およびデータベースの変更などもできます。

1グッド

1クリップ

投稿2020/07/06 07:01

編集2020/07/06 07:24

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 環境からはまりどころなしに使える非同期処理があればあわせて教えていただけると助かります

mypt👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

delaed_job は使ったことはまだ無いですが、rails g の一般的なやり方を考えると

開発環境で rails generate delayed_job し
Rails.root/bin の中身も git 登録したら良いのでは?

投稿2020/07/06 09:29

winterboum

総合スコア23284

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2020/07/07 02:59

ありがとうございます! うまくいきました
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問