неинициализированная константа Кодирование с использованием rvm, ruby ​​1.9.2, сборщика и пассажира

Я здесь в отчаянии и обращаюсь ко всем вам за помощью в этом 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


person coneybeare    schedule 19.06.2011    source источник
comment
Ваш /shared/bundle/ruby/1.8/ выдает это: ваша консоль все еще использует 1.8, а не 1.9.   -  person Ryan Bigg    schedule 19.06.2011
comment
Но в подсказке написано ruby-1.9.2-p180?   -  person coneybeare    schedule 19.06.2011
comment
@coneybeare: Но /shared/bundle/ruby/1.8 говорит 1,8? Удалите /shared/bundle/ruby/1.8, если вы его не используете. Возможно, вам придется снова запустить bundle install.   -  person Ryan Bigg    schedule 20.06.2011
comment
Я попытался удалить его и переделать пакет install --deployment (та же строка, что и cap deploy)… он создает гемы в ruby/1.8, несмотря на то, что загружены гемы 1.9 (как показано выше при использовании bundle exec). Заглавная строка, используемая для установки, выглядит следующим образом: bundle install --gemfile /path/to/releases/20110619032757/Gemfile —path /path/to/shared/bundle --deployment --quiet --без тестирования разработки   -  person coneybeare    schedule 20.06.2011
comment
Когда вы находитесь в консоли, что такое $LOAD_PATH?   -  person Seamus Abshere    schedule 23.06.2011
comment
$LOAD_PATH равен нулю в bash и в консоли rails   -  person coneybeare    schedule 24.06.2011
comment
Это очень странно... это должен быть массив каталогов (строк). Оба $: и $LOAD_PATH равны нулю в консоли rails??   -  person Seamus Abshere    schedule 24.06.2011
comment
нет, моя ошибка, я делал ENV[LOAD_PATH]. Обновлен ответ   -  person coneybeare    schedule 26.06.2011
comment
Спасибо за эту суть. Каково содержимое ENV, когда вы находитесь в консоли? (Используйте require pp; pp ENV) Кроме того, каково содержимое Gemfile.lock?   -  person Seamus Abshere    schedule 27.06.2011
comment
Действительно ли гем aws-s3 находится в вашем Gemfile? Возможно, вы сначала установили гем aws-s3 в систему в среде ruby ​​1.8, а затем забыли добавить гем aws-s3 в Gemfile.   -  person Peder    schedule 27.06.2011
comment
Да, гем aws-s3 находится в Gemfile и Gemfile.lock. Я опубликую суть этого.   -  person coneybeare    schedule 27.06.2011
comment
Я обновил несколько запрошенных сущностей.   -  person coneybeare    schedule 27.06.2011


Ответы (1)


ОБНОВЛЕНО та же идея (что GEM_HOME перепутана), но больше предложений

Ваш GEM_HOME перепутался, возможно, потому что ваш PATH перепутался. Вы можете попробовать установить следующую переменную среды в вашей оболочке

$ 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 упаковщик не устанавливает правильный гемсет, если гем установлен в другой версии ruby

person Seamus Abshere    schedule 27.06.2011
comment
Это не помогло. Я удалил свою общую папку/папку пакета и повторно запустил команду установки пакета. Он по-прежнему устанавливает его как 1,8. Я думаю, что путь к драгоценному камню имеет только 1.8 как имя, а не как содержимое. Внутри папки все гемы в порядке и самые свежие. - person coneybeare; 27.06.2011
comment
Чтобы было ясно, я проверил это, отредактировав файл boot.rb, как указано, удалив каталог общего пакета, повторив установку пакета, а затем проверьте в rails c, существует ли кодировка. - person coneybeare; 27.06.2011
comment
Вы полностью удалили и переустановили драгоценный камень комплекта? Каково содержимое вашего файла .bundle/config, если он у вас есть? - person Seamus Abshere; 27.06.2011
comment
Я просто удалил и переустановил драгоценный камень. Я обновил вопрос с помощью файла bundle/config. Тем не менее, он устанавливается в каталог 1.8. Похоже, что он по-прежнему использует 1.9.2 в соответствии с приглашением консоли и версией ruby ​​exec. - person coneybeare; 27.06.2011
comment
Попробуйте удалить .bundle/config и Gemfile.lock и повторно запустить обновление пакета. - person Seamus Abshere; 27.06.2011
comment
развертывание установки пакета не может быть запущено без уже зарегистрированного файла Gemfile.lock. Удаление файла .bundle/config ничего не дало - person coneybeare; 28.06.2011