我已经无计可施了,我向大家寻求有关f*#$^编码问题的帮助。
我在拥有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
除了这个错误,我的rails应用程序运行良好,没有问题。然而,当我尝试使用encode
方法更改字符串的编码时,它是:
NoMethodError: undefined method `encode' for "foobar":String
应该定义encode
,但它不是!如果我在irb
:中尝试,则会发现Encoding
$ irb
ruby-1.9.2-p180 :001 > Encoding
=> Encoding
ruby-1.9.2-p180 :002 > "foobar".encode('utf-8')
=> "foobar"
但是,如果我尝试通过bundle exec使用rails控制台,则找不到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
显然,安装程序没有正确加载某些内容,但我不确定该从哪里查找。我在这里错过了什么?
更新6/19/2011
正如Ryan Bigg所指出的,gems的目录路径是1.8
,这很奇怪。然而,运行bundle exec
表明bundler使用的是正确的ruby和rails版本:
$ 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
很明显,这里有些不稳定……我只是不知道是什么。
更新日期:2011年6月26日
Seamus要求$LOAD_PATH…
更新日期:2011年6月26日(稍后)
Seamus要求提供Gemfile.lock和pp ENV…在ENV
输出中,我发现GEM_PATH
不正确。在我的staging.rb
环境文件中,我有:
GEM_HOME = "/home/[REDACTED]/.rvm/gems/ruby-1.9.2-p180@[REDACTED]"
GEM_PATH = "/home/[REDACTED]/.rvm/gems/ruby-1.9.2-p180@[REDACTED]:/home/[REDACTED]/.rvm/gems/ruby-1.9.2-p180@global"
……这显然没有得到尊重。在我的代码中,没有其他地方提到GEM_HOME
或GEM_PATH
更新日期:2011年6月27日
Seamus要求提供.bundle/config
内容…
更新相同的想法(GEM_HOME
被搞砸了),但更多的建议
您的GEM_HOME
出错了,可能是因为您的PATH出错了。您可以尝试在shell中设置以下环境变量
$ export PATH=[your current path but with rvm's ruby 1.9 at the front]
然后运行
$ bundle install
如果这不起作用,也可以尝试在你的外壳中设置这个
$ export GEM_HOME=[your ruby 1.9 gem home]
然后重新运行
$ bundle install
这个答案的新想法:使用RVM,当gem安装在不同的ruby版本中时,bundler不会安装在正确的gemset中