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

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

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

CentOSは、主にRed Hat Enterprise Linux(RHEL)をベースにした、フリーのソフトウェアオペレーティングシステムです。

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails

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

Capistrano

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

Q&A

0回答

4805閲覧

capistranoでunicornを起動する際に間違った参照先でコマンドが実行されてしまいます。参照先を正しくするための方法を教えてください。

yamatora

総合スコア17

CentOS

CentOSは、主にRed Hat Enterprise Linux(RHEL)をベースにした、フリーのソフトウェアオペレーティングシステムです。

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails

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

Capistrano

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

0グッド

1クリップ

投稿2016/09/10 03:13

編集2022/01/12 10:55

capistranoを使用してデプロイを試みているのですが
unicornを起動する箇所でなぜか/var/www/my_app/current/config/unicorn/staging.rbを参照してしまっています

bundle exec unicorn -c /var/www/my_app/current/config/unicorn/staging.rb -E staging -D

本当でしたら

/var/www/vhosts/mydomain/current/config/unicorn/staging.rb

を参照する必要があるのですがunicorn.rakeというファイルで明示的に

/var/www/vhosts/mydomain/current/unicorn/staging.rb

を指定してもなぜか/var/www/my_app以下が参照されてしまいます。
この解決方法を教えてください。
よろしくお願いいたします。

$ cap staging deploy を実行すると以下のように出力されます

・ ・ ・ DEBUG [9d6821ae] Command: cd /var/www/vhosts/mydomain/current && ( export RBENV_ROOT="/usr/local/rbenv" RBENV_VERSION="2.2.3" RAILS_ENV="staging" ; RBENV_ROOT=/usr/local/rbenv RBENV_VERSION=2.2.3 /usr/local/rbenv/bin/rbenv exec bundle exec unicorn -c /var/www/my_app/current/config/unicorn/staging.rb -E staging -D ) DEBUG [9d6821ae] bundler: failed to load command: unicorn (/var/www/vhosts/mydomain/shared/bundle/ruby/2.2.0/bin/unicorn) DEBUG [9d6821ae] Errno::ENOENT: No such file or directory @ rb_sysopen - /var/www/my_app/current/config/unicorn/staging.rb

config/deploy.rb

ruby

1# config valid only for Capistrano 3.1 2lock '3.2.1' 3 4set :application, 'my_app' 5set :repo_url, 'git@github.com:me/my_app.git' 6set :keep_releases, 5 7 8set :rbenv_type, :system # :system or :user 9set :rbenv_ruby, '2.2.3' 10set :rbenv_prefix, "RBENV_ROOT=#{fetch(:rbenv_path)} RBENV_VERSION=#{fetch(:rbenv_ruby)} #{fetch(:rbenv_path)}/bin/rbenv exec" 11set :rbenv_map_bins, %w{rake gem bundle ruby rails} 12set :rbenv_roles, :all # default value 13 14set :linked_files, %w{config/database.yml config/secrets.yml} 15set :linked_dirs, %w{bin log tmp/backup tmp/pids tmp/cache tmp/sockets vendor/bundle} 16 17set :unicorn_pid, "#{shared_path}/tmp/pids/unicorn.pid" 18set :unicorn_config_path, "#{release_path}/config/unicorn/staging.rb" 19 20set :bundle_jobs, 4 21set :whenever_identifier, ->{ "#{fetch(:application)}_#{fetch(:stage)}" } 22 23after 'deploy:publishing', 'deploy:restart' 24namespace :deploy do 25 # アプリの再起動を行うタスク 26 desc 'Restart application' 27 task :restart do 28 on roles(:app), in: :sequence, wait: 5 do 29 execute :mkdir, '-p', release_path.join('tmp') 30 execute :touch, release_path.join('tmp/restart.txt') 31 end 32 end 33 34 # linked_files で使用するファイルをアップロードするタスク 35 # deployが行われる前に実行する必要がある。 36 desc 'upload importabt files' 37 task :upload do 38 on roles(:app) do |host| 39 execute :mkdir, '-p', "#{shared_path}/config" 40 upload!('config/database.yml',"#{shared_path}/config/database.yml") 41 upload!('config/secrets.yml',"#{shared_path}/config/secrets.yml") 42 end 43 end 44 45 # webサーバー再起動時にキャッシュを削除する 46 after :restart, :clear_cache do 47 on roles(:web), in: :groups, limit: 3, wait: 10 do 48 # Here we can do anything such as: 49 within release_path do 50 execute :rm, '-rf', release_path.join('tmp/cache') 51 end 52 end 53 end 54 55 # Flow の before, after のタイミングで上記タスクを実行 56 before :started, 'deploy:upload' 57 after :finishing, 'deploy:cleanup' 58 59 # Unicorn 再起動タスク 60 desc 'Restart application' 61 task :restart do 62 invoke 'unicorn:restart' # lib/capistrano/tasks/unicorn.cap 内処理を実行 63 end 64end

lib/capistrano/tasks/unicorn.rake
このファイル内のunicorn_configで対象のファイルを指定できている?と思っています。

ruby

1namespace :unicorn do 2 task :environment do 3 set :unicorn_pid, "#{shared_path}/tmp/pids/unicorn.pid" 4 set :unicorn_config, "/var/www/vhosts/mydomain/current/config/unicorn/#{fetch(:rails_env)}.rb" 5 end 6 7 def start_unicorn 8 within current_path do 9 execute :bundle, :exec, :unicorn, "-c #{fetch(:unicorn_config)} -E #{fetch(:rails_env)} -D" 10 end 11 end 12 13 desc "Start unicorn server" 14 task :start => :environment do 15 on roles(:app) do 16 start_unicorn 17 end 18 end 19end

config/unicorn/staging.rb

ruby

1app_path = '/var/www/vhosts/mydomain' 2 3worker_processes 2 4working_directory "#{app_path}" + "/current" 5 6preload_app true 7timeout 30 8 9listen "#{app_path}/shared/tmp/sockets/unicorn.sock", :backlog => 64 10 11pid "#{app_path}/shared/tmp/pids/unicorn.pid" 12 13stderr_path "#{app_path}/current/log/unicorn.stderr.log" 14stdout_path "#{app_path}/current/log/unicorn.stdout.log" 15 16before_exec do |server| 17 ENV['BUNDLE_GEMFILE'] = "#{app_path}/current/Gemfile" 18end 19 20before_fork do |server, worker| 21 defined?(ActiveRecord::Base) and ActiveRecord::Base.connection.disconnect! 22 old_pid = "#{app_path}/shared/tmp/pids/unicorn.pid.oldbin" 23 if File.exists?(old_pid) && server.pid != old_pid 24 begin 25 sig = (worker.nr + 1) >= server.worker_processes ? :QUIT : :TTOU 26 Process.kill(sig, File.read(old_pid).to_i) 27 rescue Errno::ENOENT, Errno::ESRCH 28 # someone else did our job for us 29 end 30 end 31 sleep 1 32end 33 34after_fork do |server, worker| 35 defined?(ActiveRecord::Base) and ActiveRecord::Base.establish_connection 36end

Capfileに以下を追加

ruby

1Dir.glob('lib/capistrano/tasks/*.rake').each { |r| import r }

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

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

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

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

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

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問