べつの質問サイトで質問した内容なのですが
Rails 関係の質問にあまり回答がつかないようなのでそちら削除して
こちらで新たに質問させていただきました
前提・実現したいこと
Rails を勉強中です
ローカルで一通り動いたプロジェクトを
capistorano というジェムを使って
べつのSSHできるサーバー環境で動かしたいです
(練習なのでサーバーも virtualbox 上です)
発生している問題・エラーメッセージ
capistorano 自体は成功してファイルのコピーやプリコンパイル等は行われますが
ユニコーン関連のタスクがまったくみあたらず実行された様子が有りません
とうぜん capistorano 実行後も unicorn のプロセスが動いてなくてサイトが機能しません
capistorano の仕組みがまったくわかってないんですが
after :publishing, :restart
の部分で終わった後 unicorn restart を読んでる気がするんですが
publishing というタスクがおこなわれてないせいで restart もされないのかなと思ってます
ただ publishing という定義がどこにもないのですが
どこのサイトにもこうかいてあってこの publishing というタスクは
じぶんでなにか定義しなければいけないのでしょうか
bundle exec cap production deploy
コマンドで動いたタスクは以下になります
00:00 git:wrapper 00:01 git:check 00:03 deploy:check:directories 00:04 deploy:check:linked_dirs 00:06 git:clone 00:07 git:update 00:10 git:create_release 00:14 deploy:set_current_revision 00:15 deploy:symlink:linked_dirs 00:27 bundler:install 00:29 deploy:assets:precompile 00:54 deploy:assets:backup_manifest 00:56 deploy:symlink:release 01:07 deploy:cleanup 01:10 deploy:log_revision
該当のソースコード
Capfile に以下を追加
ruby
1require 'capistrano3/unicorn'
config/deploy.rb に以下を追加
ruby
1namespace :deploy do 2 desc 'Restart application' 3 task :restart do 4 invoke 'unicorn:restart' 5 end 6 7 desc 'Create database' 8 task :db_create do 9 on roles(:db) do |host| 10 with rails_env: fetch(:rails_env) do 11 within current_path do 12 execute :bundle, :exec, :rake, 'db:create' 13 end 14 end 15 end 16 end 17 18 desc 'Run seed' 19 task :seed do 20 on roles(:app) do 21 with rails_env: fetch(:rails_env) do 22 within current_path do 23 execute :bundle, :exec, :rake, 'db:seed' 24 end 25 end 26 end 27 end 28 29 after :publishing, :restart 30 31 after :restart, :clear_cache do 32 on roles(:web), in: :groups, limit: 3, wait: 10 do 33 end 34 end 35end
lib/capistrano/tasks/unicorn.rake を作成して以下を記述
namespace :unicorn do task :environment do set :unicorn_pid, "#{current_path}/tmp/pids/unicorn.pid" set :unicorn_config, "#{current_path}/config/unicorn.conf.rb" end def start_unicorn within current_path do execute :bundle, :exec, :unicorn, "-c #{fetch(:unicorn_config)} -E #{fetch(:rails_env)} -D" end end def stop_unicorn execute :kill, "-s QUIT $(< #{fetch(:unicorn_pid)})" end def reload_unicorn execute :kill, "-s USR2 $(< #{fetch(:unicorn_pid)})" end def force_stop_unicorn execute :kill, "$(< #{fetch(:unicorn_pid)})" end desc "Start unicorn server" task start: :environment do on roles(:app) do start_unicorn end end desc "Stop unicorn server gracefully" task stop: :environment do on roles(:app) do stop_unicorn end end desc "Restart unicorn server gracefully" task restart: :environment do on roles(:app) do if test("[ -f #{fetch(:unicorn_pid)} ]") reload_unicorn else start_unicorn end end end desc "Stop unicorn server immediately" task force_stop: :environment do on roles(:app) do force_stop_unicorn end end end
試したこと
サーバー内にはいって /var/www/.../current/ で
bundle exec unicorn_rails -c config/unicorn.rb -E production -D
を実行すると普通に unicornが機動して外部からもみられるようになります
補足情報(FW/ツールのバージョンなど)
ローカル、リモートとも virtualbox 上の ubuntu
ruby 2.6.5
rails, capistorano 等ジェムもここ1週間ぐらいの最新です
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2020/01/01 05:22
2020/01/02 02:28