Я здесь в отчаянии и обращаюсь ко всем вам за помощью в этом f*#$^ вопросе кодирования.
Я работаю на частном сервере с правами root на Dreamhost. Вот немного о моей среде и версиях.
$ `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
должен быть определен, но это не так! Encoding
будет найдено, если я попробую в irb
:
$ irb
ruby-1.9.2-p180 :001 > Encoding
=> Encoding
ruby-1.9.2-p180 :002 > "foobar".encode('utf-8')
=> "foobar"
Но если я попытаюсь использовать консоль rails через пакет exec, 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
Очевидно, установка загружает что-то неправильно, но я не уверен, где искать, чтобы понять это. Что мне здесь не хватает?
ОБНОВЛЕНИЕ 19.06.2011
Как заметил Райан Бигг, любопытно, что путь к каталогу для драгоценных камней — 1.8
. Однако запуск bundle exec
показывает, что упаковщик использует правильные версии 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
Здесь явно что-то не так… Я просто не знаю, что.
ОБНОВЛЕНИЕ 26 6 июня 2011 г.
Симус запросил $LOAD_PATH…
ОБНОВЛЕНИЕ 26 июня 2011 г. (позже)
Симус запросил 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
ОБНОВЛЕНИЕ 27.06.2011
Симус запросил содержимое .bundle/config
…
/shared/bundle/ruby/1.8/
выдает это: ваша консоль все еще использует 1.8, а не 1.9. - person Ryan Bigg   schedule 19.06.2011/shared/bundle/ruby/1.8
говорит 1,8? Удалите/shared/bundle/ruby/1.8
, если вы его не используете. Возможно, вам придется снова запуститьbundle install
. - person Ryan Bigg   schedule 20.06.2011