我在其他一些问题/ Github问题上看到了这个问题,但他们未能为解决方案做出足够的启示。
错误:
bash: bundle: command not found
SSHKit::Runner::ExecuteError: Exception while executing as my-user@my-IP-address: cd /path-to-my-app/current ; bundle exec unicorn -D -c config/unicorn.rb -E production exit status: 127
cd /path-to-my-app/current ; bundle exec unicorn -D -c config/unicorn.rb -E production stdout: Nothing written
cd /path-to-my-app/current ; bundle exec unicorn -D -c config/unicorn.rb -E production stderr: bash: bundle: command not found
我在我的rails应用程序上使用最新版本的Capistrano。具体来说,它是一个带有宝石capistrano-rails
和capistrano-rvm
的Rails 4.2.0应用程序。
我有一个非常标准的config/unicorn.rb
文件,这是我登录服务器时启动独角兽的方式。我先用以下方法终止当前的PID:
kill -9 PID
然后我用:
开始独角兽bundle exec unicorn -D -c /path-to-my/config/unicorn.rb -E production
这很好用,但显然我需要capistrano这样做,所以我基本上在我的deploy.rb
文件中有这些任务,但是我得到了上面提到的那个错误。以下是我在deploy.rb
中的两项任务:
namespace :deploy do
namespace :unicorn do
task :restart do
on roles(:app), in: :sequence, wait: 5 do
execute "kill -s USR2 `cat /path-to-my/tmp/pids/app-name.pid`"
end
end
desc 'Start unicorn'
task :start do
on roles(:app), in: :sequence, wait: 5 do
execute "cd #{current_path} ; bundle exec unicorn -D -c config/unicorn.rb -E production"
end
end
end
end
我有类似的任务重新启动DelayedJob,它会抛出相同的错误。命令为execute "cd #{current_path} ; RAILS_ENV=production bin/delayed_job -n2 restart"
。就像我上面提到的,当我的用户(我用于Capistrano的用户)登录到服务器时,所有这些任务都按预期工作。
其他每个内置任务都适用于Capistrano,就像预编译资产,迁移我的数据库等一样。我添加的自定义任务会收到错误。
如果我可以添加任何内容来帮助解决问题,请告诉我。
答案 0 :(得分:0)
仔细看看Capistrano的输出。诸如bundle assets:precompile
makes initialization of required ruby version之类的命令:
cd /<app path>/20150301211440 && ( RAILS_ENV=staging /usr/local/rvm/bin/rvm 2.1.5 do bundle exec rake assets:precompile )
好像你不这样做。所以,可能你默认使用系统ruby并且它没有bundler
gem。
尝试在命令中指定ruby版本使用RVM。我认为应该解决你的问题。