0

我正在使用 ruby​​ 1.9.3p194 和 bundler 1.1.4

在我的 Gemfile 我有这个:

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

当我运行 $ rails 时,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 s 时,剂量捆绑器会强制您安装所有 gem?

我也尝试了 group:test,同样的事情发生了。这对我来说真的没有意义,有人可以帮忙吗?

我的宝石文件:

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' 
4

1 回答 1

0

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

默认情况下,捆绑包中的 gem 安装在全局 gem 目录中。当您不预先bundle exec添加命令时,这可能会产生令人困惑的结果:假设您在全局 gem 中同时拥有 rails 3.1 和 rails 3.2 并且您的 Gemfile 提到了 3.1。然后,当您简单地rails在命令行上说时,您仍然会从 rails 3.2 调用可执行文件。

当然thin,如果它没有与全局 gem 一起安装,那么它当然会丢失。假设您--path至少使用了一次打包选项,您的 gem 已安装到那里指定的路径,而不是全局存储库。使用后--path必须指定bundle exec,否则根本找不到 gem。

于 2012-08-03T05:32:24.347 回答