【问题标题】:Could not find timers-1.1.0 in any of the sources (Bundler::GemNotFound)在任何源中都找不到 timers-1.1.0 (Bundler::GemNotFound)
【发布时间】:2014-06-18 10:36:18
【问题描述】:

Phusion 乘客抛出以下错误:

Could not find timers-1.1.0 in any of the sources (Bundler::GemNotFound)

我真的不确定这个 timers-1.1.0 gem 是什么,但我确实有一个名为 sidekiq 的 gem,当我仔细阅读 Gemfile.lock 时,我确实注意到 sidekiq 依赖于赛璐珞,赛璐珞依赖于计时器(我的Gemfile 包含 sidekiq 但不包含其他两个):

sidekiq (2.13.0)
  celluloid (>= 0.14.1)

celluloid (0.14.1)
  timers (>= 1.0.0)

我有一个工作正常的生产服务器,现在我部署了我的第一个登台服务器(与生产不同的 ip 和 git 分支)。 staging 分支与 github 上的 master 分支相同。

登台服务器似乎缺少生产服务器具有的 timers-1.1.0。这才是真正让我困惑的地方。我正在使用 RVM。我的 capistrano 任务包括以下内容:

set :rvm_type, :system
before "deploy", "deploy:create_gemset"

namespace :deploy do
  desc "Create the gemset"
  task :create_gemset do
    run "rvm #{rvm_ruby_string} --create"
  end

 desc "Install the bundle"
  task :bundle do
    run "bundle install --gemfile #{release_path}/Gemfile --without development test"
  end
end

所以我假设当我第一次部署 staging 时,它会为 staging 服务器创建一个 gemset,该 gemset 镜像生产服务器的 gemset,它会运行 bundle install 以确保 staging 上的新 gemset 具有所有生产服务器的宝石。但显然这并没有发生。

我比较了两台服务器:

生产服务器:

$ rvm -v
rvm 1.17.3 (stable)

$ rvm list    
rvm rubies
=* ruby-1.9.3-p327 [ x86_64 ]
# => - current
# =* - current && default
#  * - default

$ rvm info | grep gem
    gem:          "/usr/local/rvm/gems/ruby-1.9.3-p327"
    gem:          "/usr/local/rvm/rubies/ruby-1.9.3-p327/bin/gem"
    rake:         "/usr/local/rvm/gems/ruby-1.9.3-p327@global/bin/rake"
    PATH:         "/usr/local/rvm/gems/ruby-1.9.3-p327/bin:/usr/local/rvm/gems/ruby-1.9.3-p327@global/bin:/usr/local/rvm/rubies/ruby-1.9.3-p327/bin:/usr/local/rvm/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games"
    GEM_HOME:     "/usr/local/rvm/gems/ruby-1.9.3-p327"
    GEM_PATH:     "/usr/local/rvm/gems/ruby-1.9.3-p327:/usr/local/rvm/gems/ruby-1.9.3-p327@global"
    gemset:       ""

暂存服务器:

$ rvm -v    
rvm 1.21.2 (stable)

$ rvm list    
rvm rubies
   ruby-1.9.3-p0 [ x86_64 ]
   ruby-1.9.3-p194 [ x86_64 ]
=* ruby-1.9.3-p392 [ x86_64 ]
   ruby-1.9.3-p429 [ x86_64 ]
   ruby-2.0.0-p0 [ x86_64 ]
# => - current
# =* - current && default
#  * - default

   $ rvm info | grep gem
    gem:          "/usr/local/rvm/gems/ruby-1.9.3-p392"
    gem:          "/usr/local/rvm/rubies/ruby-1.9.3-p392/bin/gem"
    rake:         "/usr/local/rvm/gems/ruby-1.9.3-p392/bin/rake"
    PATH:         "/usr/local/rvm/gems/ruby-1.9.3-p392/bin:/usr/local/rvm/gems/ruby-1.9.3-p392@global/bin:/usr/local/rvm/rubies/ruby-1.9.3-p392/bin:/usr/local/rvm/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/home/myuser/bin"
    GEM_HOME:     "/usr/local/rvm/gems/ruby-1.9.3-p392"
    GEM_PATH:     "/usr/local/rvm/gems/ruby-1.9.3-p392:/usr/local/rvm/gems/ruby-1.9.3-p392@global"
    gemset:       ""

    $ rvm gemset list
    gemsets for ruby-1.9.3-p429 (found in /usr/local/rvm/gems/ruby-1.9.3-p429)
    (default)
    global
    spree_ecommerce
    => MySite

    $ rvm gemdir
   /usr/local/rvm/gems/ruby-1.9.3-p429@MySite

    cd /usr/local/rvm/gems/ruby-1.9.3-p429@MySite
    $ cd gems
    $ ls -l | grep timers                                    
    drwxrwsr-x  4 myuser rvm 4096 Jul 24  2013 timers-1.1.0

    rvm use ruby-1.9.3-p429 --default
    rvm-prompt
    Using /usr/local/rvm/gems/ruby-1.9.3-p429

注意,我也尝试在登台服务器上运行 bundle install。

我注意到的一件事是 Phusion Passenger。我的生产服务器默认 ruby​​ 版本和乘客配置相同:

$ rvm-prompt
ruby-1.9.3-p327

$ cat passenger.conf
PassengerRoot /usr/local/rvm/gems/ruby-1.9.3-p327/gems/passenger-3.0.18
PassengerRuby /usr/local/rvm/wrappers/ruby-1.9.3-p327/ruby

$ cat passenger.load
LoadModule passenger_module /usr/local/rvm/gems/ruby-1.9.3-p327/gems/passenger-3.0.18/ext/apache2/mod_passenger.so

但登台服务器不同:

$ rvm-prompt
ruby-1.9.3-p429

$ cat passenger.conf
PassengerRoot /usr/local/rvm/gems/ruby-1.9.3-p194/gems/passenger-3.0.12

$ cat passenger.load
LoadModule passenger_module /usr/local/rvm/gems/ruby-1.9.3-p194/gems/passenger-3.0.12/ext/apache2/mod_passenger.so

也许乘客在登台时看错了红宝石和宝石?

【问题讨论】:

    标签: ruby-on-rails rvm capistrano passenger


    【解决方案1】:

    以防万一其他人有这个问题,确实是 phusion 乘客的错。它使用了错误的红宝石版本和红宝石宝石。它使用的 ruby​​/gems 版本没有安装 timers gem。解决方案是更改 apache 配置文件以更新乘客以使用正确的 ruby​​/gems:

    $ cd /etc/apache2/mods-available
    $ sudo vim passenger.conf
    <IfModule mod_passenger.c>
     PassengerRoot /usr/local/rvm/gems/ruby-1.9.3-p429@MySite/gems/passenger-4.0.41
     PassengerDefaultRuby /usr/local/rvm/wrappers/ruby-1.9.3-p429@MySite/ruby
    </IfModule>
    
    $ sudo vim passenger.load
    LoadModule passenger_module /usr/local/rvm/gems/ruby-1.9.3-p429@MySite/gems/passenger-4.0.41/buildout/apache2/mod_passenger.so
    $ sudo a2enmod passenger
    $ sudo /etc/init.d/apache2 restart
    

    还要确保乘客 gem 确实安装在您用于应用程序的 ruby​​/gems 版本中。

    【讨论】:

      猜你喜欢
      • 2018-04-08
      • 2012-04-19
      • 2015-03-04
      • 2014-07-11
      • 2012-06-08
      • 2019-11-16
      • 2014-06-05
      • 2014-06-05
      • 1970-01-01
      相关资源
      最近更新 更多