3

I have a Rails 3 application which has the following line in the Gemfile.

gem 'sqlite3', '1.3.6'

However, if I list my local gems I get:

> gem list sqlite3 --local

*** LOCAL GEMS ***

sqlite3 (1.3.6, 1.3.4)

When my Rails apps does a

require 'sqlite3'

which version of the gem is selected? Is it that the first gem in the list is selected? Is there a way to tell the Ruby runtime to use version 1.3.4 even if version 1.3.6 is installed, and mandated by the Gemfile?

4

3 に答える 3

2

Gemfileはバージョンを指定するか、バージョンをGemfile.lock持ちます。

例:

Gemfile:

gem 'tiny_tds', '0.5.0'

Gemfile.lock:

tiny_tds (0.5.0)

編集:バージョンを確認したい場合は、iltemposの提案またはrails consoleタイプを使用してください

1.9.3p194 :001 > SQLite3::VERSION
 => "1.3.6" 
于 2013-01-03T14:53:30.077 に答える
2

あなたはで見つけることができます

bundle exec gem list sqlite3
于 2013-01-03T14:58:37.950 に答える
0

Rails アプリケーションのGemfileすべての依存関係をリストすると、各 gem に使用するバージョンに関する制約を追加できます。あなたの例では、アプリケーションが sqlite3 1.3.6 に依存することを指定したため、バージョン 1.3.6 を使用します。

一般に、アプリケーションに必要な gem の正確なバージョンはGemfile.lock.

バージョンを指定するために使用できる構文がいくつかあります。

  • gem 'gemname', '1.2.3'- gemname バージョン 1.2.3 が必要です
  • gem 'gemname', '>= 1.2.3'- gemname バージョン 1.2.3 以降が必要です。物を壊せる
  • gem 'gemname', '~> 1.2'- gemname 1.2 または 1.2.9 のようなマイナー アップデートが必要です。あなたは更新を取得しますが、互換性を損なう可能性のある市長のものは取得しません

注目すべき興味深い点はGemfile.lock、バージョン管理が作成されてチェックインされると、チームのすべてのメンバー間で共有され、必要な gem の同じ正確なバージョンが使用されることです。

必要な gem を更新する必要がある場合は、次の 2 つの手順で実行できます。

  1. Gemfile必要に応じて更新する
  2. 走るbundle update gemname

ステップ 2 では、新しい gem バージョンをダウンロードし (制約を考慮した新しいバージョンが にある場合Gemfile)、それをインストールし、Gemfile.lockそれに応じて を更新します。

于 2013-01-03T15:47:54.663 に答える