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

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

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

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

Q&A

解決済

2回答

14117閲覧

Capistranoでrailsアプリをデプロイしようとするが、unicornで詰まってしまう

yappari

総合スコア18

Ruby on Rails

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

0グッド

1クリップ

投稿2016/06/15 15:00

編集2016/06/16 03:01

###前提・実現したいこと

http://qiita.com/zaru/items/9e02706b27094ce36902
こちらのサイトを参考にさせていただきまして、railsアプリのデプロイに挑戦しています。
ローカルのCentOSからさくらvpsへのデプロイです。

アプリ自体はrails new sample しただけの空っぽです。

$ bundle exec cap staging deploy:checkまでは成功しました。

###発生している問題・エラーメッセージ

途中で、こんなエラーが出てしまいます。

bundler: failed to load command: unicorn (/var/www/myapp/shared/bundle/ruby/2.3.0/bin/unicorn)

###該当のソースコード

$ bundle exec cap staging deploy

###試したこと
手が出せません

###補足のソースコード
Capfile

require 'capistrano/setup' require 'capistrano/deploy' require 'sshkit/sudo' # https://github.com/capistrano-plugins/capistrano-safe-deploy-to require 'capistrano/safe_deploy_to' # 追加 # rbenvを使用している場合 require 'capistrano/rbenv' # デプロイ先のサーバで、ユーザディレクトリでrbenvをインストールしている場合 set :rbenv_type, :user set :rbenv_ruby, '2.3.0' require 'capistrano/bundler' require 'capistrano/rails/assets' require 'capistrano/rails/migrations' require 'capistrano3/unicorn' # Rails4から分離したsecrets.ymlの環境変数を .envファイルで管理する set :linked_files, %w{config/secrets.yml .env} # タスクを読み込むけど、今回は特に使わない Dir.glob('lib/capistrano/tasks/*.rake').each { |r| import r }

deploy.rb

lock '3.4.1' set :application, 'sample' set :repo_url, 'git@github.com:yappari/sample.git' set :branch, 'master' set :deploy_to, '/var/www/myapp' set :scm, :git set :log_level, :debug set :pty, true set :linked_dirs, %w{bin log tmp/pids tmp/cache tmp/sockets bundle public/system public/assets} set :default_env, { path: "/usr/local/rbenv/shims:/usr/local/rbenv/bin:$PATH" } set :keep_releases, 5 after 'deploy:publishing', 'deploy:restart' namespace :deploy do desc 'Restart application' task :restart do invoke 'unicorn:restart' end end

追加
ログ

INFO [47bc3a49] Running $HOME/.rbenv/bin/rbenv exec bundle exec unicorn -c /var/www/myapp/current/config/unicorn/staging.rb -E staging -D as yappari@(ipアドレス) DEBUG [47bc3a49] Command: cd /var/www/myapp/current && ( export PATH="/usr/local/rbenv/shims:/usr/local/rbenv/bin:$PATH" RBENV_ROOT="$HOME/.rbenv" RBENV_VERSION="2.3.0" RAILS_ENV="staging" ; $HOME/.rbenv/bin/rbenv exec bundle exec unicorn -c /var/www/myapp/current/config/unicorn/staging.rb -E staging -D ) DEBUG [47bc3a49] bundler: failed to load command: unicorn (/var/www/myapp/shared/bundle/ruby/2.3.0/bin/unicorn)

config/unicorn/staging.rb

@app_path = '/var/www/myapp' working_directory @app_path + "/current" worker_processes 2 preload_app true timeout 30 listen "/tmp/unicorn.sock", :backlog => 64 pid "/var/www/myapp/shared/tmp/pids/unicorn.pid" stderr_path "#{@app_path}/log/unicorn.stderr.log" stdout_path "#{@app_path}/log/unicorn.stdout.log" before_fork do |server, worker| ENV['BUNDLE_GEMFILE'] = File.expand_path('Gemfile', ENV['RAILS_ROOT']) end before_fork do |server, worker| if defined?(ActiveRecord::Base) ActiveRecord::Base.connection.disconnect! end old_pid = "#{server.config[:pid]}.oldbin" if File.exists?(old_pid) && server.pid != old_pid begin Process.kill("QUIT", File.read(old_pid).to_i) rescue Errno::ENOENT, Errno::ESRCH end end end after_fork do |server, worker| if defined?(ActiveRecord::Base) ActiveRecord::Base.establish_connection end end

config/deploy/staging.rb

set :rails_env, "staging" set :unicorn_rack_env, "staging" set :deploy_to, '/var/www/myapp' user = "yappari" ipaddress = "(ipアドレス)" role :app, ["#{user}@#{ipaddress}"] role :web, ["#{user}@#{ipaddress}"] role :db, ["#{user}@#{ipaddress}"] server '(ipアドレス)', user: 'yappari', roles: %w{web app} set :ssh_options, { keys: %w(/home/vagrant/.ssh/id_rsa), forward_agent: true, auth_methods: %w(publickey), port: (ポート番号) }

どうかお力を貸していただけないでしょうか?

情報を追加いたしました。よろしくお願いいたします。

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

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

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

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

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

rifuch

2016/06/15 15:31

Capfile(特にrequire周り)とdeploy.rbのサンプルを見せていただけますか?現状では情報不足です。
rifuch

2016/06/16 02:43

失敗する所の前のログはどうなっていますか? DEBUGモードなら、RuninngとCommand:の行に実際に発行されたコマンドがあるはずです。
guest

回答2

0

自己解決

config/unicorn/staging.rbの中の

before_fork do |server, worker|
ENV['BUNDLE_GEMFILE'] = File.expand_path('Gemfile', ENV['RAILS_ROOT'])
end
の部分を
root = "/var/www/myapp/current"
before_exec do |server|
ENV['BUNDLE_GEMFILE'] = "#{root}/Gemfile"
end
に書き換えたところ…成功しました。
参考(http://qiita.com/ironsand/items/1bc21f29a590b6f2bb1f)

rifuchさんの仰るとおり、bundle:installがうまくいっていなかったんだと思われます…。
(Gemfileのパスが間違ってた?)

アドバイスのおかげで、なんとかなりました。ありがとうございます。
精進いたします…。

投稿2016/06/17 11:22

編集2016/06/17 12:04
yappari

総合スコア18

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

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

rifuch

2016/06/17 12:58

無事解決して良かったです。おつかれ様でした
guest

0

rbenv環境はいじった事がないので、ちょっと自信が無いですが

bundle execのパスがAPP_ROOT/shared/bundleを指していないのでdeployで行われるbundle:installが有効ではないのでは?というのが予想です。
GEM_HOME,GEM_PATHにAPP_ROOT/shared/bundleあたりのパスを追加するか、
deploy前に、シェルからbundle installして、/usr/local/rbenv/以下にgemがインストールされるようにするかしてみてはどうでしょうか。
(rvmでは、capistranoがbundle execする前に、毎回rvmが参照するgemのパスを設定するためのスクリプトが動いています。APP_ROOT/rvm1scripts/rvm-auto.sh RVM_VERSION bundle exec ... rbenvではどうなのでしょうか)

上記がどうも外しているようであれば、system側にunicornをインストールするために、rbenvsudo gem install unicornとかして見るのも一つの手かもしれません。

投稿2016/06/16 05:21

rifuch

総合スコア1901

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.44%

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

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

質問する

関連した質問