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

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

ただいまの
回答率

89.20%

capistranoのdefault_envの(値の)設定方法に関して(pathはどこを確認して、設定するのか?)

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 1,673

big2017

score 34

railsアプリのデプロイ作業をしておりますが、

$ cap production deploy

の最中に/usr/bin/env: ruby: そのようなファイルやディレクトリはありませんというエラーが発生します

エラーログ

bundler:install
      01 /home/user/.rbenv/bin/rbenv exec bundle install --path /var/www/app/fender/shared/bundle --without development test --deployment --quiet
      01 /usr/bin/env: ruby: そのようなファイルやディレクトリはありません
#<Thread:0x00007fab32813b18@/Users/user/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/gems/sshkit-1.17.0/lib/sshkit/runners/parallel.rb:10 run> terminated with exception (report_on_exception is true):
Traceback (most recent call last):
    1: from /Users/user/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/gems/sshkit-1.17.0/lib/sshkit/runners/parallel.rb:11:in `block (2 levels) in execute'
/Users/user/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/gems/sshkit-1.17.0/lib/sshkit/runners/parallel.rb:15:in `rescue in block (2 levels) in execute': Exception while executing as user@***.**.*.***: bundle exit status: 127 (SSHKit::Runner::ExecuteError)
bundle stdout: /usr/bin/env: ruby: そのようなファイルやディレクトリはありません
bundle stderr: Nothing written
(Backtrace restricted to imported tasks)
cap aborted!
SSHKit::Runner::ExecuteError: Exception while executing as user@***.**.*.***: bundle exit status: 127

$ less log/capistrano.log

 DEBUG [2efa1e88] Command: cd /var/www/app/fender/releases/20180916155036 && ( export RBENV_ROOT="/home/user/.rbenv" RBENV_VERSION="2.5.1" ; /home/user/.rbenv/bin/rbenv exec bundle check --path /var/www/app/fender/shared/bundle )

 DEBUG [f78703ad]     /usr/bin/env: ruby: そのようなファイルやディレクトリはありません

 DEBUG [f78703ad] Finished in 0.194 seconds with exit status 127 (failed).

  INFO [06a59c4a] Running /home/user/.rbenv/bin/rbenv exec bundle install --path /var/www/app/fender/shared/bundle --without development test --deployment --quiet as user@***.**.*.***

 DEBUG [06a59c4a] Command: cd /var/www/app/fender/releases/20180916155036 && ( export RBENV_ROOT="/home/user/.rbenv" RBENV_VERSION="2.5.1" ; /home/user/.rbenv/bin/rbenv exec bundle install --path /var/www/app/fender/shared/bundle --without development test --deployment --quiet )

 DEBUG [d6342b8b]     /usr/bin/env: ruby: そのようなファイルやディレクトリはありません

調べた結果、 config/deploy.rbにset :default_env, { path: "ここのパスの指定の仕方がわからない" }を 設定することで治る可能性があるとのことですが、どこを見てパスを設定すれば良いか、わからないので、質問させていただきました。

config/deploy.rb

# 共通の設定をconfig/deploy.rbで記述

# config valid for current version and patch releases of Capistrano
lock "~> 3.11.0"

set :application, "fender"
set :repo_url, "git@github.com:hoge/hoge.git" # デプロイ対象のリポジトリ
set :deploy_to, '/var/www/app/hoge'

set :branch, 'master' # ブランチを指定
# set :scm, :git
set :deploy_via, :remote_cache


set :log_level, :debug # 出力の制御
set :pty, true # sudoを使用するのに必要
set :bundle_binstubs, nil

# capistrano用でbundleするのに必要
set :default_env, { path: ""} ← 該当箇所です


# Shared に入るものを指定
set :linked_files, %w{config/database.yml config/secrets.yml} # シンボリックリンクを貼るファイル
set :linked_dirs,  %w{bin log tmp/pids tmp/cache tmp/sockets bundle public/system public/assets} # sharedにシンボリックリンクを張るディレクトリ指定

# Unicorn
set :unicorn_pid, "#{shared_path}/tmp/pids/unicorn.pid"


set :keep_releases, 5
after 'deploy:publishing', 'deploy:restart'
namespace :deploy do

 desc 'Restart application'
  # アプリ再起動を行うタスク
  task :restart do
    on roles(:app), in: :sequence, wait: 5 do
      execute :mkdir, '-p', release_path.join('tmp')
      execute :touch, release_path.join('tmp/restart.txt')
    end
  end
  # linked_files で使用するファイルをアップロードするタスク
  # deployが行われる前に実行する必要がある。
  desc 'upload important files'
  task :upload do
    on roles(:app) do |host|
      execute :mkdir, '-p', "#{shared_path}/config"
      upload!('config/database.yml',"#{shared_path}/config/database.yml")
      upload!('config/secrets.yml',"#{shared_path}/config/secrets.yml")
    end
  end

  # webサーバー再起動時にキャッシュを削除する
  after :restart, :clear_cache do
   on roles(:web), in: :groups, limit: 3, wait: 10 do
    #Here we can do anything such as:
    within release_path do
      execute :rm, '-rf', release_path.join('tmp/cache')
    end
   end
  end
  # Flow の before, after のタイミングで上記タスクを実行
  before :started,   'deploy:upload'
  after  :finishing, 'deploy:cleanup'

  #unicorn 再起動タスク
  desc 'Restart application'
  task :restart do
    invoke 'unicorn:restart' # lib/capustrano/tasks/unicorn.cap 内処理を実行
  end
end

capfile

# capistranoの基本動作を設定
require "capistrano/setup"
require "capistrano/deploy"

require "capistrano/scm/git"
install_plugin Capistrano::SCM::Git



require "capistrano/rbenv"
set :rbenv_type, :user #rbenvをシステムにインストールした or ユーザーローカルにインストールした
set :rbenv_ruby, '2.5.1'

set :rbenv_custom_path, '/home/user/.rbenv'
# リモートサーバーで$ rbenv version
# 2.5.1 (set by /home/user/.rbenv/version)に基づく

require "capistrano/bundler"
require "capistrano/rails/assets"
require "capistrano/rails/migrations"

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

Gemfile

  gem 'capistrano', require: false
  gem 'capistrano-bundler', require: false
  gem 'capistrano-rails', require: false
  gem 'capistrano-rbenv', require: false
  gem 'capistrano-rails-console', require: false # 手元の環境からデプロイ先のconsoleを使う  https://qiita.com/zaru/items/42953ac86df29043fda0
$ gem env

RubyGems Environment:
  - RUBYGEMS VERSION: 2.7.6
  - RUBY VERSION: 2.5.1 (2018-03-29 patchlevel 57) [x86_64-linux]
  - INSTALLATION DIRECTORY: /home/user/.rbenv/gems/2.5.0
  - USER INSTALLATION DIRECTORY: /home/user/.gem/ruby/2.5.0
  - RUBY EXECUTABLE: /home/user/.rbenv/versions/2.5.1/bin/ruby
  - EXECUTABLE DIRECTORY: /home/user/.rbenv/gems/2.5.0/bin
  - SPEC CACHE DIRECTORY: /home/user/.gem/specs
  - SYSTEM CONFIGURATION DIRECTORY: /home/user/.rbenv/versions/2.5.1/etc
  - RUBYGEMS PLATFORMS:
    - ruby
    - x86_64-linux
  - GEM PATHS:
     - /home/user/.rbenv/gems/2.5.0
  - GEM CONFIGURATION:
     - :update_sources => true
     - :verbose => true
     - :backtrace => false
     - :bulk_threshold => 1000
     - "install" => "--env-shebang"
     - "gemhome" => "/home/user/.rbenv/gems/2.5.0"
  - REMOTE SOURCES:
     - https://rubygems.org/
  - SHELL PATH:
     - /home/user/.rbenv/versions/2.5.1/bin
     - /home/user/.rbenv/libexec
     - /home/user/.rbenv/plugins/ruby-build/bin
     - /home/user/.rbenv/plugins/rbenv-communal-gems/bin
     - /home/user/.rbenv/shims
     - /home/user/.rbenv/bin
     - /usr/local/bin
     - /usr/bin
     - /usr/local/sbin
     - /usr/sbin
     - /home/user/.local/bin
     - /home/user/bin
$ gem list

*** LOCAL GEMS ***
bundler (1.16.4)

defaul_envに関しては以下の記事の中に記載されています。

参考/usr/bin/env ruby no such file or directory: Using capistrano 3, capistrano/rbenv, capistrano/bundler and capistrano/rails (using rails 4)

2日たっても自分で解決することができませんでした、、すみませんが、お力添えいただけないでしょうか。
長文で失礼しました。

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

check解決した方法

0

capfileの中のdefault_envにpathを含めることで解決しました!

set :default_env, {
rbenv_root: "#{fetch(:rbenv_custom_path)}",
path: "#{fetch(:rbenv_custom_path)}/shims:#{fetch(:rbenv_custom_path)}/bin:$PATH",
}

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

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

  • ただいまの回答率 89.20%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる