每当Gem无法运行“ bundle exec”时,正确地在Capistrano [英] Whenever Gem Fails to Run "bundle exec" Correctly in Capistrano

查看:89
本文介绍了每当Gem无法运行“ bundle exec”时,正确地在Capistrano的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在使用Capistrano将Everyever gem部署到生产环境时遇到问题。

I'm having problems deploying the Whenever gem to my production environment using Capistrano.

问题源于捆绑执行程序,只要命令会触发一些缺少的gem问题(但是从shell运行捆绑安装显示实际上一切都在那里!)。

The problem is stemming from a bundle exec whenever command that's triggering some 'missing gem' issues (yet running bundle install from the shell shows that everything is in fact there!).

我的感觉是发生以下两种情况之一:在调用 bundle exec 之前,Bundler尚未完全加载,或者某种方式存在路径问题,导致在错误的地方运行它

My feeling is that one of two things is happening: that Bundler isn't fully loading before bundle exec is being called, or that somehow there's a path issue that's running it in the wrong place.

这是怎么回事:

  * executing `deploy'
  * executing `deploy:update'
 ** transaction: start
  * executing `deploy:update_code'
    executing locally: "git ls-remote git@my-source-repository:mysource.git HEAD"
    command finished in 1847ms
  * executing "git clone -q git@my-source-repository:mysource.git /domains/myapp/releases/20130124211036 && cd /domains/myapp/releases/20130124211036 && git checkout -q -b deploy 90238bbcb993e3e7df2374ffaa13e7ed701c202e && (echo 90238bbcb993e3e7df2374ffaa13e7ed701c202e > /domains/myapp/releases/20130124211036/REVISION)"
    servers: ["myip"]
    [myip] executing command
 ** [myip :: out] Enter passphrase for key '/home/deploy/.ssh/id_rsa':
 ** [myip :: out]
    command finished in 9294ms
  * executing `deploy:finalize_update'
    triggering before callbacks for `deploy:finalize_update'
  * executing `whenever:update_crontab'
  * executing "cd /domains/myapp/releases/20130124211036 && bundle exec whenever --update-crontab My App --set environment=production --roles db"
    servers: ["myip"]
    [myip] executing command
 ** [out :: myip] Could not find carrierwave-0.5.8 in any of the sources
 ** [out :: myip] Run `bundle install` to install missing gems.
    command finished in 1967ms
*** [deploy:update_code] rolling back
  * executing "rm -rf /domains/myapp/releases/20130124211036; true"
    servers: ["myip"]
    [myip] executing command
    command finished in 998ms
failed: "rvm_path=/usr/local/rvm /usr/local/rvm/bin/rvm-shell '1.9.3' -c 'cd /domains/myapp/releases/20130124211036 && bundle exec whenever --update-crontab My App --set environment=production --roles db'" on myip



上时

您可以看到失败是由以下行引起的:

You can see that the failure is coming from this line:

bundle exec whenever --update-crontab

这又是由我的Capistrano deploy.rb运行的。

Which is in turn being run by my Capistrano deploy.rb.

# Your Application's "Name"
set :application, [My App]

# The URL to your application's repository
set :repository, [repo]
set :scm, :git
set :scm_passphrase, [password]

# The user you are using to deploy with (This user should have SSH access to your server)
set :user, "deploy"

# We want to deploy everything under your user, and we don't want to use sudo
set :use_sudo, false

# Where to deploy your application to.
set :deploy_to, "/domains/myapp/"

# Load RVM's capistrano plugin.    
require "rvm/capistrano"

set :rvm_ruby_string, '1.9.3'
set :rvm_type, :system  # use system-wide RVM

# Require that we use bundler to install necessary gem dependencies
require "bundler/capistrano"

set :whenever_command, "bundle exec whenever"
require "whenever/capistrano"


# -------------------------------- Server Definitions --------------------------------
# Define the hostname of your server.  If you have multiple servers for multiple purposes, we can define those below as well.
set :server_name, [server]

# We're assuming you're using a single server for your site, but if you have a seperate asset server or database server, you can specify that here.
role :app, server_name
role :web, server_name
role :db,  server_name, :primary => true

# -------------------------------- Final Config --------------------------------
# This configuration option is helpful when using svn+ssh but doesn't hurt anything to leave it enabled always.
default_run_options[:pty] = true 

namespace :deploy do
  desc "Tell Passenger to restart the app."
  task :restart do
    run "touch #{deploy_to}current/tmp/restart.txt"
  end

  task :start do
    run "cd #{deploy_to} && ln -s current/public public_html"
    run "touch #{deploy_to}current/tmp/restart.txt"
  end

  task :symlink do
    run "cd #{deploy_to} && rm current ; ln -s releases/#{release_name} current"
  end

  task :stop do
    run "rm #{deploy_to}public_html"
  end

  namespace :web do
    task :disable do
      run "cd #{deploy_to} && rm public_html && ln -s static_site public_html"
    end

    task :enable do
      run "cd #{deploy_to} && rm public_html && ln -s current/public public_html"
    end
  end


  desc "Symlink shared configs and folders on each release."
  task :symlink_shared do
    run "ln -nfs #{shared_path}/config/database.yml #{release_path}/config/database.yml"
    run "ln -nfs #{shared_path}/assets #{release_path}/public/assets"

    # create symlink to uploads folder for Carrierwave resources (i.e., book cover images)
    run "ln -nfs #{shared_path}/uploads  #{release_path}/public/uploads"
  end

  desc "Sync the public/assets directory."
  task :assets do
    system "rsync -vr --exclude='.DS_Store' public/assets #{user}@#{application}:#{shared_path}/"
  end

end

after "deploy", "deploy:migrate"

after 'deploy:update_code', 'deploy:symlink_shared'

after(:setup) do
  run "rm -rf #{deploy_to}public_html"
  run "mkdir #{deploy_to}static_site"
end

现在,关于CarrierWave的错误是虚假的-我已经使用CarrierWave很久了-这个问题显然已经根除(如触发错误的命令所见),无论何时它本身或Bundler。

Now, the error that I'm getting about CarrierWave is bogus - I've been using CarrierWave for ages - and the issue clearly stems (as you can see by the command that triggers the error) from either Whenever itself or Bundler.

而且我认为它实际上可能与路径有关与RVM有关。无论如何,只要捆绑执行器 c都无法正常工作。

And I'm thinking that it actually may have something to do with paths related to RVM. At any rate, the bundle exec whenever isn't working.

有什么想法吗?

推荐答案

原来有两个问题,都需要解决:

It turns out there were a couple problems, both of which needed addressing:


  • 每当〜> 0.8引入了Capistrano角色的错误

  • 每当有cap任务在bundle:install之前触发(在上面的代码中已确认)

在此处查看问题: https://github.com/javan/whenever/issues/275 和此处: https ://github.com/javan/whenever/issues/269

See issues here: https://github.com/javan/whenever/issues/275 and here: https://github.com/javan/whenever/issues/269

要解决此问题,您很可能需要

To fix the problem, you most likely need to


  • 更新服务器上的捆绑程序(-v 1.2.3)

  • 在本地更新捆绑程序

  • 随时更新至最新版本(-v 0.8.2)

这篇关于每当Gem无法运行“ bundle exec”时,正确地在Capistrano的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆