【问题标题】:Capistrano Error: '/usr/bin/env ruby : No such file or directory'Capistrano 错误:'/usr/bin/env ruby​​:没有这样的文件或目录'
【发布时间】:2014-05-17 02:22:12
【问题描述】:

当我尝试使用 Capistrano 重新启动 unicorn 时:

$ cap production deploy:restart_unicorn

我收到了这个错误:

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

我的环境:

  • Mac OSX 10.9.2
  • Capistrano 版本:3.2.1(Rake 版本:10.3.1)
  • rvm 1.25.25(稳定)
  • 红宝石 2.1.2p95
  • Rails 4.1.1
  • 捆绑器 1.6.2

我的服务器环境:

  • Ubuntu 14.04 LTS(GNU/Linux 3.13.0-24-generic x86_64)

我的配置/deploy.rb:

lock '3.2.1'

set :application, 'my_app'
set :repo_url,    'git@gitrepo.com:my_app.git'
set :deploy_to,   '/var/www/my_app'

set :linked_files, %w{.env}
set :linked_dirs, %w{bin log tmp/pids tmp/cache public/system}
set :rvm_ruby_version, '2.1.2'

namespace :deploy do
  desc 'Restart application'
  task :restart_unicorn do
    on roles :app, in: :sequence, wait: 5 do
      execute 'service unicorn upgrade'
    end
  end

  after :publishing, :restart_unicorn
end

我的独角兽初始化脚本:

#!/bin/sh
set -e
. /etc/environment

TIMEOUT=${TIMEOUT-60}
APP_ROOT=/var/www/my_app/current
PID=$APP_ROOT/tmp/pids/unicorn.pid
CMD="$APP_ROOT/bin/unicorn -D -c $APP_ROOT/config/unicorn.rb -E $RAILS_ENV"
action="$1"
set -u

cd $APP_ROOT || exit 1

sig () {
  test -s "$PID" && kill -$1 `cat $PID`
}

case $action in
restart)
  sig HUP && echo reloaded OK && exit 0
  echo >&2 "Couldn't reload, starting '$CMD' instead"
  $CMD
  ;;
esac

我的 Gemfile:

# ...
gem 'capistrano', '~> 3.2.0'
gem 'capistrano-bundler', '~> 1.1.2'
gem 'capistrano-rails', '~> 1.1'
gem 'capistrano-rvm'
# ...

我的 Capfile:

require 'capistrano/setup'
require 'capistrano/deploy'

require 'capistrano/bundler'
require 'capistrano/rvm'
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/*.rake').each { |r| import r }

【问题讨论】:

    标签: ruby-on-rails ruby ubuntu capistrano unicorn


    【解决方案1】:

    我已经解决了这个问题,只需将 PATH 变量添加到我的独角兽初始化脚本中:

    #!/bin/sh
    set -e
    . /etc/environment
    
    PATH=/usr/local/rvm/rubies/ruby-2.1.2/bin:$PATH
    TIMEOUT=${TIMEOUT-60}
    # ...
    

    【讨论】:

      【解决方案2】:

      如果您使用 rvm 来选择您的红宝石之一,您可能需要使用 Capistrano'sRVM's gems,因为它们会设置您错过的任何其他必要的红宝石路径。

      并允许您根据需要使用 rvm 更新 ruby​​。

      【讨论】:

        猜你喜欢
        • 2016-02-20
        • 2013-03-11
        • 1970-01-01
        • 1970-01-01
        • 2017-03-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多