Ruby on rails 3 &引用;“未初始化常量编码”;使用rvm、ruby 1.9.2、捆绑机和乘客

Ruby on rails 3 &引用;“未初始化常量编码”;使用rvm、ruby 1.9.2、捆绑机和乘客,ruby-on-rails-3,encoding,rvm,bundler,ruby-1.9.2,Ruby On Rails 3,Encoding,Rvm,Bundler,Ruby 1.9.2,我在这里束手无策,在这个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应用程序运行良

我在这里束手无策,在这个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
中尝试,则会找到code>编码:

$ irb
ruby-1.9.2-p180 :001 > Encoding
 => Encoding
ruby-1.9.2-p180 :002 > "foobar".encode('utf-8')
 => "foobar"
但是如果我尝试通过bundle exec使用rails控制台,则找不到
编码

$ 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
显然,安装程序没有正确加载某些内容,但我不确定从何处查找以找出答案。我错过了什么?


2011年6月19日更新

正如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日更新

西莫斯要求…


更新日期:2011年6月26日(以后)

Seamus要求在
ENV
输出中输入和…我发现
GEM\u路径不正确。在我的
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\u HOME
GEM\u PATH



2011年6月27日更新


西莫斯要求提供内容……

更新了相同的想法(即
GEM\u HOME
是一团糟),但提出了更多建议

您的
GEM_HOME
被弄乱了,可能是因为您的路径被弄乱了。您可以尝试在shell中设置以下环境变量

$ export PATH=[your current path but with rvm's ruby 1.9 at the front]
然后跑

$ bundle install
如果这不起作用,请尝试在shell中设置它

$ export GEM_HOME=[your ruby 1.9 gem home]
然后重新运行

$ bundle install

这个答案的新想法:

你的
/shared/bundle/ruby/1.8/
泄露了它:你的控制台仍在使用1.8,而不是1.9。但是提示说“ruby-1.9.2-p180”?@coneybeare:但是
/shared/bundle/ruby/1.8
说的是1.8?如果不使用,请删除
/shared/bundle/ruby/1.8
。您可能需要再次运行
bundle install
。我确实尝试过删除它并重新执行bundle安装--部署(与cap deploy使用的行相同)…它在ruby/1.8下创建gems,尽管加载了1.9 gems(使用bundle exec时如上所示)。cap用于安装的行是:“bundle install--gemfile/path/to/releases/20110619032757/gemfile-path/path/to/shared/bundle--deployment--quiet--without development test”。当您在控制台中时,$LOAD\u path是什么?它没有帮助。我删除了共享/捆绑文件夹,并重新运行捆绑安装命令。它仍然将其设置为1.8。我认为gem路径只有1.8作为名称,而不是内容。在文件夹中,所有的gem都很好,都是最新的。要清楚,我检查这一点的方法是编辑boot.rb文件,如图所示,删除共享的bundle目录,重新安装bundle,然后检查rails c(如果存在编码)。您是否完全卸载并重新安装了bundler gem?如果您有.bundle/config文件,那么它的内容是什么?我刚刚卸载并重新安装了gem。我用bundle/config文件更新了这个问题。不过,它安装在1.8目录下。根据控制台提示和bundle exec ruby版本,它似乎仍在使用1.9.2。请尝试删除.bundle/config和Gemfile.lock,然后重新运行bundle update。