0

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 s を実行すると、Dose bundler によってすべての 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と、バンドルのコンテキスト内で実行されます。これで、bundlerで使用できるすべてのgemがコマンドで使用できるようになります。

デフォルトでは、バンドルのgemはグローバルgemディレクトリにインストールされます。これにより、コマンドの前に追加しない場合、混乱を招く結果が生じる可能性がbundle execあります。グローバルgemにrails 3.1とrails3.2の両方があり、Gemfileが3.1に言及していると想像してください。rails次に、コマンドラインで言うだけで、Rails3.2から実行可能ファイルを呼び出すことができます。

もちろんthin、グローバルgemと一緒にインストールされていない場合にのみ、欠落する可能性があります。--pathバンドルするオプションを少なくとも1回使用したとすると、gemは、グローバルリポジトリではなく、そこで指定されたパスにインストールされています。を使用した後--path、を指定する必要があります。指定bundle execしないと、gemがまったく見つかりません。

于 2012-08-03T05:32:24.347 に答える