2011-06-25 1 views
0

から、私は(システムでレールから外部スクリプトを呼んでいる)、私はこれを取得:)Railsの

/home/user/.rvm/gems/ruby-1.9.2-p180/gems/activerecord- 
3.0.7/lib/active_record/connection_adapters/mysql_adapter.rb:22:in 
`rescue in mysql_connection': !!! Missing the mysql2 gem. Add it to 
your Gemfile: gem 'mysql2' (RuntimeError) 
... 

このエラーは、外部によって引き起こされていますrubygemsとアクティブなレコードをレールなしでロードするスクリプト。

require 'rubygems' 
gem 'mysql2', '0.2.7' 
require 'active_record' 
...#active record initialization 
c = Class.new # Class uses rails models 
c.run 

私もスクリプトがレール内使用するクラスを使用することができるよ:私はmysql2レールの同じバージョンを使用している指定した場合、スクリプトはまだシェルから動作します。つまり、use rakeは、active_recordの初期化を取り除いた後にスクリプトを実行できます。しかし、これが最初に何が起こっているのかを知ることはうれしいでしょう。

編集。 bundle execでスクリプトを実行すると、 'active_record'が必要なコメントを解除しない限り、同じエラーが発生します。この場合、モデルを呼び出すときにNameErrorsが残されます。

Edit2。 'gem list'と 'bundle exec gem list'を比較し、バンドルバージョンより新しいバージョンのgemを削除することで修正されました。バンドルのexecを使わないで実行することはまだ動作しています。 Gemfileにはレール3.0.7が必要でしたが、activerecordの3.1.0.beta1バージョンもインストールされていました。バンドルexecがレールバージョンを無視し、最新のバージョンのactiverecordをロードするようです。おそらくgem 'activerecord'、 '3.0.7'を外部スクリプトやgemfileに追加すると、この問題が解決されます。

答えて

0

あなたはRVMを使用しているので、バンドルと同じコンテキスト内で動作していない別のRubyで動作している可能性があります。このコマンドを実行するには、bundle execを使用していることを確認してください。

+0

Railsは同じrvmを使用していますが、シェルからbundle execを使用すると同じエラーが発生することがわかりました。それは実際にはスクリプト内の "active_record"を "必要とする"原因です。これがなければ、モデル名にNameErrorsが得られます。 – Cookies