2011-06-19 4 views
5

私はここで終わりですが、このf *#$ ^エンコーディングの問題については、rvm、ruby 1.9.2、bundler、passengerを使用した「初期化されていない定数エンコーディング」

私はDreamhostでroot権限を持つプライベートサーバー上で実行しています。ここで私の環境とバージョンについての少しです。

$ `which ruby` -v 
ruby 1.9.2p180 (2011-02-18 revision 30909) [x86_64-linux] 
$ `which bundle` -v 
Bundler version 1.0.15 
$ `which rails` -v 
Rails 3.0.9 

このエラーとは別に、私のレールアプリは問題なく動作します。私はそれをencodeメソッドを使用して、エンコーディングに文字列を変更しようとすると、しかし、:

NoMethodError: undefined method `encode' for "foobar":String 

encodeshould beを定義したが、それはありません!

$ irb 
ruby-1.9.2-p180 :001 > Encoding 
=> Encoding 
ruby-1.9.2-p180 :002 > "foobar".encode('utf-8') 
=> "foobar" 

しかし、私は、バンドル幹部を通じてレールコンソールを使用してみた場合、Encodingが発見されていない:私はirbにしようとした場合Encodingが発見された

明らか
$ bundle exec rails c staging 
Loading staging environment (Rails 3.0.9) 
ruby-1.9.2-p180 :001 > Encoding 
NameError: uninitialized constant Encoding 
    from /[REDACTED]/shared/bundle/ruby/1.8/gems/aws-s3-0.6.2/lib/aws/s3/extensions.rb:206:in `const_missing' 
    from (irb):1 
ruby-1.9.2-p180 :002 > "foobar".encode('utf-8') 
    NoMethodError: undefined method `encode' for "foobar":String 

セットアップが正常に何かをロードしていませんが、私それを理解するためにどこを見るべきかわからない。私はここで何が欠けていますか?


UPDATE 2011年6月19日

ライアンBiggのが指摘したように、宝石のディレクトリパスが1.8であること好奇心旺盛です。しかし、bundle execを実行すると、バンドラのバージョンが正しいルビーを使用してレールされていることを示しています

$ bundle exec which ruby 
/path/to/.rvm/rubies/ruby-1.9.2-p180/bin/ruby 
$ bundle exec `which ruby` -v 
ruby 1.9.2p180 (2011-02-18 revision 30909) [x86_64-linux] 
$ bundle exec which rails 
/path/to/shared/bundle/ruby/1.8/bin/rails 
$ bundle exec `which rails` -v 
Rails 3.0.9 

明らかに何かがここにグラグラです...私は何を知りません。


UPDATE 2011年6月26日シーマスは$LOAD_PATHを求め

...


UPDATE 2011年6月26日(後)

シーマスを尋ねましたとpp ENV ... ENVの出力では、GEM_PATHが正しくないことがわかりました。私staging.rb環境ファイルでは、私が持っている:明らかに光栄されていない

GEM_HOME = "/home/[REDACTED]/.rvm/gems/[email protected][REDACTED]" 
GEM_PATH = "/home/[REDACTED]/.rvm/gems/[email protected][REDACTED]:/home/[REDACTED]/.rvm/gems/[email protected]" 

を...。どこも私のコードでGEM_HOMEまたはGEM_PATH


の言及はありシーマスは.bundle/config内容を求めUPDATE 2011年6月27日

...

+2

あなたの '/ shared/bundle/ruby​​/1.8 /'は、あなたのコンソールがまだ1.9ではなく1.8を使っていることを示しています。 –

+0

しかし、プロンプトに「ruby-1.9.2-p180」と表示されますか? – coneybeare

+0

@coneybeare:しかし、 '/ shared/bundle/ruby​​/1.8'は1.8と言っていますか? '/ shared/bundle/ruby​​/1.8'を削除してください。もう一度 'bundle install'を実行しなければならないかもしれません。 –

答えて

0

は(同じ考えを更新しましたそのGEM_HOMEが台無しになっています)、より多くの提案

GEM_HOMEになっている可能性があります。PATHが壊れている可能性があります。あなたはそれが動作しない場合は、またあなたのシェルで

$ export GEM_HOME=[your ruby 1.9 gem home] 

これを設定してみてください

$ bundle install 

を実行し

シェルで
$ export PATH=[your current path but with rvm's ruby 1.9 at the front] 

次の環境変数を設定してみてください可能性があり再実行します。

$ bundle install 

この回答の新しいアイデア:Using RVM, bundler does not install in proper gemset when gems are installed in a different ruby version

+0

それは役に立たなかった。共有/バンドルフォルダを削除し、バンドルインストールコマンドを再実行しました。それでも1.8と設定されています。私は、宝石のパスには内容としてではなく名前として1.8しかないと思います。フォルダ内には、すべての宝石が細かく最新のものがあります。 – coneybeare

+0

明確にするには、これを確認する方法は、示されているようにboot.rbファイルを編集し、共有バンドルディレクトリを削除し、バンドルインストールをやり直して、エンコードが存在する場合にはrails cをチェックインすることです。 – coneybeare

+0

バンドラ・ジェムを完全にアンインストールして再インストールしましたか? .bundle/configファイルの内容は何ですか? –

関連する問題