Подтвердить что ты не робот

/usr/bin/env ruby ​​нет такого файла или каталога: Использование capistrano 3, capistrano/rbenv, capistrano/bundler и capistrano/rails (с использованием рельсов 4)

Я использую capistrano, capistrano/rbenv, capistrano/bundler и capistrano/rails. Я получаю эту ошибку на этапе, когда capistrano компилирует активы:

DEBUG [49a50df6]    /usr/bin/env:
DEBUG [49a50df6]    ruby
DEBUG [49a50df6]    : No such file or directory
DEBUG [49a50df6]

В производственном сервере /usr/bin/env ruby -v является правильным. Я знаю об этом: почему-то-то-работает-в-моем-ssh-сеанс-но-не-в-капистрано Но я не могу заставить его работать.

Это мой Capfile:

# Load DSL and Setup Up Stages
require 'capistrano/setup'

# Includes default deployment tasks
require 'capistrano/deploy'

# Includes tasks from other gems included in your Gemfile
#
# For documentation on these, see for example:
#
#   https://github.com/capistrano/rvm
#   https://github.com/capistrano/rbenv
#   https://github.com/capistrano/chruby
#   https://github.com/capistrano/bundler
#   https://github.com/capistrano/rails/tree/master/assets
#   https://github.com/capistrano/rails/tree/master/migrations
#
# require 'capistrano/rvm'
require 'capistrano/rbenv'
# require 'capistrano/chruby'
require 'capistrano/bundler'
require 'capistrano/rails/assets'
require 'capistrano/rails/migrations'

# Loads custom tasks from 'lib/capistrano/tasks' if you have any defined.
Dir.glob('lib/capistrano/tasks/*.cap').each { |r| import r }

Это мой deploy.rb:

# rbenv
set :rbenv_type, :user
set :rbenv_ruby, '2.0.0-p247'

# bundler
set :bundle_gemfile, -> { release_path.join('Gemfile') }
set :bundle_dir, -> { shared_path.join('bundle') }
set :bundle_flags, '--deployment --quiet'
set :bundle_without, %w{development test}.join(' ')
set :bundle_binstubs, -> { shared_path.join('bin') }
set :bundle_roles, :all

# rails
set :rails_env, 'production'

set :application, 'MY APP'
set :repo_url, 'MY_REPO.git'

# ask :branch, proc { 'git rev-parse --abbrev-ref HEAD'.chomp }

# set :deploy_to, '/var/www/my_app'
# set :scm, :git

# set :format, :pretty
# set :log_level, :debug
# set :pty, true

set :linked_files, %w{.env config/database.yml}
# set :linked_dirs, %w{bin log tmp/pids tmp/cache tmp/sockets vendor/bundle public/system}

# set :default_env, { path: "/opt/ruby/bin:$PATH" }
set :keep_releases, 5

namespace :deploy do

  desc 'Restart application'
  task :restart do
    on roles(:app), in: :sequence, wait: 5 do
      # Your restart mechanism here, for example:
      # execute :touch, release_path.join('tmp/restart.txt')
    end
  end

  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 :rake, 'cache:clear'
      # end
    end
  end

  after :finishing, 'deploy:cleanup'

end

И это моя staging.rb.

set :stage, :staging

# Simple Role Syntax
# ==================
# Supports bulk-adding hosts to roles, the primary
# server in each group is considered to be the first
# unless any hosts have the primary property set.
#role :app, %w{[email protected]}
#role :web, %w{[email protected]}
#role :db,  %w{[email protected]}

# Extended Server Syntax
# ======================
# This can be used to drop a more detailed server
# definition into the server list. The second argument
# something that quacks like a has can be used to set
# extended properties on the server.
#server 'example.com', user: 'deploy', roles: %w{web app}, my_property: :my_value
server 'my_server', user: 'my_user', roles: %w{web app db}

# you can set custom ssh options
# it possible to pass any option but you need to keep in mind that net/ssh understand limited list of options
# you can see them in [net/ssh documentation](http://net-ssh.github.io/net-ssh/classes/Net/SSH.html#method-c-start)
# set it globally
#  set :ssh_options, {
#    keys: %w(/home/rlisowski/.ssh/id_rsa),
#    forward_agent: false,
#    auth_methods: %w(password)
#  }
# and/or per server
# server 'example.com',
#   user: 'user_name',
# roles: %w{web app},
#   ssh_options: {
#     user: 'user_name', # overrides user setting above
#     keys: %w(/home/user_name/.ssh/id_rsa),
#     forward_agent: false,
#     auth_methods: %w(publickey password)
#     # password: 'please use keys'
#   }
# setting per server overrides global ssh_options

# fetch(:default_env).merge!(rails_env: :staging)

set :deploy_to, '/home/my_user'

И это полный след:

 INFO [c24b8f94] Running RBENV_ROOT=~/.rbenv RBENV_VERSION=2.0.0-p247 ~/.rbenv/bin/rbenv exec bundle exec rake assets:precompile on 162.243.16.201
DEBUG [c24b8f94] Command: cd /home/my_app/releases/20131101193513 && ( RAILS_ENV=production RBENV_ROOT=~/.rbenv RBENV_VERSION=2.0.0-p247 ~/.rbenv/bin/rbenv exec bundle exec rake assets:precompile )
DEBUG [c24b8f94]    /usr/bin/env:
DEBUG [c24b8f94]    ruby
DEBUG [c24b8f94]    : No such file or directory
DEBUG [c24b8f94]
cap aborted!
rake stdout: Nothing written
rake stderr: Nothing written
/Users/patricio/.rbenv/versions/2.0.0-p247/lib/ruby/gems/2.0.0/gems/sshkit-1.1.0/lib/sshkit/command.rb:94:in 'exit_status='
/Users/patricio/.rbenv/versions/2.0.0-p247/lib/ruby/gems/2.0.0/gems/sshkit-1.1.0/lib/sshkit/backends/netssh.rb:125:in 'block (4 levels) in _execute'
/Users/patricio/.rbenv/versions/2.0.0-p247/lib/ruby/gems/2.0.0/gems/net-ssh-2.7.0/lib/net/ssh/connection/channel.rb:551:in 'call'
/Users/patricio/.rbenv/versions/2.0.0-p247/lib/ruby/gems/2.0.0/gems/net-ssh-2.7.0/lib/net/ssh/connection/channel.rb:551:in 'do_request'
/Users/patricio/.rbenv/versions/2.0.0-p247/lib/ruby/gems/2.0.0/gems/net-ssh-2.7.0/lib/net/ssh/connection/session.rb:561:in 'channel_request'
/Users/patricio/.rbenv/versions/2.0.0-p247/lib/ruby/gems/2.0.0/gems/net-ssh-2.7.0/lib/net/ssh/connection/session.rb:465:in 'dispatch_incoming_packets'
/Users/patricio/.rbenv/versions/2.0.0-p247/lib/ruby/gems/2.0.0/gems/net-ssh-2.7.0/lib/net/ssh/connection/session.rb:221:in 'preprocess'
/Users/patricio/.rbenv/versions/2.0.0-p247/lib/ruby/gems/2.0.0/gems/net-ssh-2.7.0/lib/net/ssh/connection/session.rb:205:in 'process'
/Users/patricio/.rbenv/versions/2.0.0-p247/lib/ruby/gems/2.0.0/gems/net-ssh-2.7.0/lib/net/ssh/connection/session.rb:169:in 'block in loop'
/Users/patricio/.rbenv/versions/2.0.0-p247/lib/ruby/gems/2.0.0/gems/net-ssh-2.7.0/lib/net/ssh/connection/session.rb:169:in 'loop'
/Users/patricio/.rbenv/versions/2.0.0-p247/lib/ruby/gems/2.0.0/gems/net-ssh-2.7.0/lib/net/ssh/connection/session.rb:169:in 'loop'
/Users/patricio/.rbenv/versions/2.0.0-p247/lib/ruby/gems/2.0.0/gems/net-ssh-2.7.0/lib/net/ssh/connection/channel.rb:269:in 'wait'
/Users/patricio/.rbenv/versions/2.0.0-p247/lib/ruby/gems/2.0.0/gems/sshkit-1.1.0/lib/sshkit/backends/netssh.rb:147:in 'block (2 levels) in _execute'
/Users/patricio/.rbenv/versions/2.0.0-p247/lib/ruby/gems/2.0.0/gems/net-ssh-2.7.0/lib/net/ssh/connection/channel.rb:514:in 'call'
/Users/patricio/.rbenv/versions/2.0.0-p247/lib/ruby/gems/2.0.0/gems/net-ssh-2.7.0/lib/net/ssh/connection/channel.rb:514:in 'do_open_confirmation'
/Users/patricio/.rbenv/versions/2.0.0-p247/lib/ruby/gems/2.0.0/gems/net-ssh-2.7.0/lib/net/ssh/connection/session.rb:545:in 'channel_open_confirmation'
/Users/patricio/.rbenv/versions/2.0.0-p247/lib/ruby/gems/2.0.0/gems/net-ssh-2.7.0/lib/net/ssh/connection/session.rb:465:in 'dispatch_incoming_packets'
/Users/patricio/.rbenv/versions/2.0.0-p247/lib/ruby/gems/2.0.0/gems/net-ssh-2.7.0/lib/net/ssh/connection/session.rb:221:in 'preprocess'
/Users/patricio/.rbenv/versions/2.0.0-p247/lib/ruby/gems/2.0.0/gems/net-ssh-2.7.0/lib/net/ssh/connection/session.rb:205:in 'process'
/Users/patricio/.rbenv/versions/2.0.0-p247/lib/ruby/gems/2.0.0/gems/net-ssh-2.7.0/lib/net/ssh/connection/session.rb:169:in 'block in loop'
/Users/patricio/.rbenv/versions/2.0.0-p247/lib/ruby/gems/2.0.0/gems/net-ssh-2.7.0/lib/net/ssh/connection/session.rb:169:in 'loop'
/Users/patricio/.rbenv/versions/2.0.0-p247/lib/ruby/gems/2.0.0/gems/net-ssh-2.7.0/lib/net/ssh/connection/session.rb:169:in 'loop'
/Users/patricio/.rbenv/versions/2.0.0-p247/lib/ruby/gems/2.0.0/gems/sshkit-1.1.0/lib/sshkit/backends/netssh.rb:149:in 'block in _execute'
/Users/patricio/.rbenv/versions/2.0.0-p247/lib/ruby/gems/2.0.0/gems/sshkit-1.1.0/lib/sshkit/backends/netssh.rb:106:in 'tap'
/Users/patricio/.rbenv/versions/2.0.0-p247/lib/ruby/gems/2.0.0/gems/sshkit-1.1.0/lib/sshkit/backends/netssh.rb:106:in '_execute'
/Users/patricio/.rbenv/versions/2.0.0-p247/lib/ruby/gems/2.0.0/gems/sshkit-1.1.0/lib/sshkit/backends/netssh.rb:54:in 'execute'
/Users/patricio/.rbenv/versions/2.0.0-p247/lib/ruby/gems/2.0.0/gems/capistrano-rails-1.0.0/lib/capistrano/tasks/assets.rake:61:in 'block (6 levels) in <top (required)>'
/Users/patricio/.rbenv/versions/2.0.0-p247/lib/ruby/gems/2.0.0/gems/sshkit-1.1.0/lib/sshkit/backends/abstract.rb:89:in 'with'
/Users/patricio/.rbenv/versions/2.0.0-p247/lib/ruby/gems/2.0.0/gems/capistrano-rails-1.0.0/lib/capistrano/tasks/assets.rake:60:in 'block (5 levels) in <top (required)>'
/Users/patricio/.rbenv/versions/2.0.0-p247/lib/ruby/gems/2.0.0/gems/sshkit-1.1.0/lib/sshkit/backends/abstract.rb:81:in 'within'
/Users/patricio/.rbenv/versions/2.0.0-p247/lib/ruby/gems/2.0.0/gems/capistrano-rails-1.0.0/lib/capistrano/tasks/assets.rake:59:in 'block (4 levels) in <top (required)>'
/Users/patricio/.rbenv/versions/2.0.0-p247/lib/ruby/gems/2.0.0/gems/sshkit-1.1.0/lib/sshkit/backends/netssh.rb:42:in 'instance_exec'
/Users/patricio/.rbenv/versions/2.0.0-p247/lib/ruby/gems/2.0.0/gems/sshkit-1.1.0/lib/sshkit/backends/netssh.rb:42:in 'run'
/Users/patricio/.rbenv/versions/2.0.0-p247/lib/ruby/gems/2.0.0/gems/sshkit-1.1.0/lib/sshkit/runners/parallel.rb:12:in 'block (2 levels) in execute'
Tasks: TOP => deploy:assets:precompile

Между прочим, я думаю, что это не связано с $PATH, потому что bundle install работает просто отлично.

Кто-нибудь знает, что происходит?

Спасибо!

4b9b3361

Ответ 1

Хорошо, исправил его.

Я добавил следующее:

set :default_env, { path: "~/.rbenv/shims:~/.rbenv/bin:$PATH" }

на мой deploy.rb.

Я не уверен, что это лучшее решение, но оно сработало.

Ответ 2

Хорошо, поскольку у меня была такая же проблема, и мне потребовалось довольно много времени, чтобы решить эту проблему:

Возможно, вам интересно, почему эта команда не работает, пока она работает, когда вы входите в систему с помощью оболочки ssh.

Я не эксперт (так исправьте меня, когда я ошибаюсь): Дело в том, что существует несколько различий при входе на удаленный сервер с использованием ssh. Процитировать документацию capistrano:

Это действительно вопрос о том, какой тип оболочки Capistrano использует, это матрица возможностей, касающихся логина, не-входа, интерактивный или неинтерактивный.

У них есть причудливый графический здесь (внизу), где они иллюстрируют путь к файлам, которые выполняются в процессе входа в систему. - данный источник также интересен, если вы хотите продолжить чтение по этой теме.

Что происходит не так?

Когда вы регистрируетесь с помощью ssh, вы (при входе) выполняете несколько файлов (например,.bash_profile при использовании bash). Обычно ваша переменная $PATH расширяется несколькими путями к важным функциям в вашей среде. НО разные "стили" входа в систему включают в себя разные файлы.

Как говорится в документации:

По умолчанию Capistrano всегда назначает не-логин, не интерактивный оболочки.

В моем случае это приводит к случаю, когда мой файл входа .bash_profile не включен, но он включал настройки для моего rvm. В результате сеанс входа в capistrano не знал о моем пути rvm.

Как я могу это исправить?

Для меня это оказалось просто раскомментированием строки "capistrano/rvm" (как я использую RVM) в Capfile (расположенной в корне вашего рельса-проекта.

Надеюсь помочь кому-то.

EDIT:

И обязательно включите gem 'capistrano-rvm' в Gemfile!

Ответ 3

Я думаю, вы должны выполнить

apt-get install git-core

на вашем сервере

Ответ 4

У меня была такая же проблема с использованием rbenv. Для меня это решило включить библиотеку rbenv перед сборщиком - не после него. Приказ оказался важным. Вот что в моем Capfile:

require 'capistrano/rbenv'
require 'capistrano/bundler'

Если вы сделали это правильно, вы должны увидеть команду bundle, выполненную с префиксом rbenv, в следующих строках:

XX RBENV_ROOT=$HOME/.rbenv RBENV_VERSION=2.3.0 $HOME/.rbenv/bin/rbenv exec bundle install ...

Ответ 5

Убедитесь, что вы требуете всех этих драгоценных камней в своем Capfile.

Ответ 6

Решение для ОШИБКИ:

/usr/bin/env git нет такого файла или каталога capistrano

Установите git на удаленном сервере, на котором выполняется развертывание.

apt-get install git

Ответ 7

Моя проблема:

DEBUG [3132b2c2]    /usr/bin/env: ‘bundle: No such file or directory
DEBUG [3132b2c2] 

Я решил это так:

В Debian в вашем ~/.bashrc есть блок кода, который говорит:

# If not running interactively, don't do anything

case $- in
   *i*) ;;
     *) return;;
esac

Когда вы запускаете Capistrano, он на самом деле будет использовать ваш ~/.bashrc, но не будет запускать никакие команды ниже этого блока кода.

Итак, я исправил проблему с добавлением строк кода, которые требовались средой загрузки ruby, над этим блоком кода, чтобы Capistrano мог загружать пакет.

source /usr/local/share/chruby/chruby.sh
source /usr/local/share/chruby/auto.sh

PS: я использую Chruby на моем сервере.

Ответ 8

Когда я набрал bundle install в терминале, он работал. Теперь, когда я использую его через Capistrano, он не работает.

Я решил это так:

В Ubuntu в вашем ~/.bashrc есть блок кода, который говорит:

# If not running interactively, don't do anything
case $- in
   *i*) ;;
     *) return;;
esac

Когда вы запускаете Capistrano, он на самом деле будет использовать ваш ~/.bashrc но не будет запускать никаких команд ниже этого блока кода.

Итак, я исправил проблему с перемещением строк кода, необходимых для bundle install над этим блоком кода, чтобы Capistrano мог их загрузить.

Вы можете получить подсказку, какие линии перемещать, запустив which bundle.

Ответ 9

Я столкнулся с той же ошибкой. После попыток исправить ее, я вспомнил, что случайно удалил несколько пакетов со своего сервера, на котором развертывал код.

Так что я также случайно удалил git. sudo apt-get install git починил.