关于捆绑者小组如何运作的困惑

时间:2012-08-01 19:08:25

标签: ruby bundler

我正在使用ruby 1.9.3p194和bundler 1.1.4

在我的Gemfile中,我有这个:

group :production do
   gem 'thin', '1.4.1'
end

当我运行$ rails s时,bundler会抱怨:

Could not find gem 'thin (>= 1.4.1) ruby' in the gems available on this machine.
Run `bundle install` to install missing gems.

我在开发环境下运行,所以它不应该关心它是否安装?剂量捆绑器强制您在运行$ rails时安装所有宝石?

我也试过这个小组:测试,同样的事情发生了。这对我来说没有意义,任何人都可以帮忙吗?

我的gemfile:

source 'https://rubygems.org'

gem 'rails', '3.2.6'
gem 'mysql2'

# Gems used only for assets and not required
# in production environments by default.
group :assets do
  gem 'sass-rails',   '~> 3.2.3'
  gem 'coffee-rails', '~> 3.2.1'

  # See https://github.com/sstephenson/execjs#readme for more supported runtimes
  # gem 'therubyracer', :platforms => :ruby

  gem 'uglifier', '>= 1.0.3'
end

gem 'jquery-rails'

group :production do
  gem 'thin', '1.4.1'
end

gem 'devise', '2.1.2'
gem 'cancan', '1.6.8'
gem 'will_paginate', '3.0.3' 

1 个答案:

答案 0 :(得分:0)

问题可能是您正在运行rails s,而您需要运行bundle exec rails s。如果在命令前加bundle exec,则在bundle的上下文中执行。然后,命令可以使用捆绑器可用的所有gem。

默认情况下,捆绑包中的gem安装在全局gem目录中。当你没有在命令前加bundle exec时,这会产生令人困惑的结果:想象你的全局宝石中有rails 3.1和rails 3.2,你的Gemfile提到3.1。然后,当您在命令行中简单地说rails时,您仍将从rails 3.2调用可执行文件。

现在当然thin只有在没有安装全局宝石时才会丢失。假设您已使用--path选项至少捆绑一次,您的gem已安装到其中指定的路径而不是全局存储库。使用--path后,必须指定bundle exec,否则根本就找不到宝石。

相关问题