RVM, Ruby 1.9.2, Rails 2.3.8, Passenger и «недопустимая последовательность байтов в US-ASCII» - PullRequest
5 голосов
/ 18 августа 2010

Я только начал процесс обновления с Ruby 1.8.7 до Ruby 1.9.2 (используя RVM).Все мои приложения выполняются с использованием 'script / server' (или 'rails server') с 1.9.2, однако, только приложения Rails 3.0.0 RC работают с Passenger.Сообщение об ошибке, выдаваемое приложениями Rails 2.3.8:

неверная последовательность байтов в US-ASCII

Я предполагаю, что это проблема ПассажираЯ установил Passenger 2.2.15, используя руководство по RVM, найденное здесь .Есть идеи, как исправить эту ошибку?Благодарю.Я обновил, чтобы включить трассировку стека:

/Users/kevin/.rvm/gems/ruby-1.9.2-p0/gems/actionpack-2.3.8/lib/action_view/template_handlers/erb.rb:14:in `compile'
/Users/kevin/.rvm/gems/ruby-1.9.2-p0/gems/actionpack-2.3.8/lib/action_view/template_handler.rb:11:in `call'
/Users/kevin/.rvm/gems/ruby-1.9.2-p0/gems/actionpack-2.3.8/lib/action_view/renderable.rb:19:in `compiled_source'
/Users/kevin/.rvm/gems/ruby-1.9.2-p0/gems/actionpack-2.3.8/lib/action_view/renderable.rb:68:in `compile!'
/Users/kevin/.rvm/gems/ruby-1.9.2-p0/gems/actionpack-2.3.8/lib/action_view/renderable.rb:61:in `compile'
/Users/kevin/.rvm/gems/ruby-1.9.2-p0/gems/actionpack-2.3.8/lib/action_view/renderable.rb:28:in `render'
/Users/kevin/.rvm/gems/ruby-1.9.2-p0/gems/actionpack-2.3.8/lib/action_view/template.rb:205:in `render_template'
/Users/kevin/.rvm/gems/ruby-1.9.2-p0/gems/actionpack-2.3.8/lib/action_view/base.rb:265:in `render'
/Users/kevin/.rvm/gems/ruby-1.9.2-p0/gems/actionpack-2.3.8/lib/action_view/base.rb:352:in `_render_with_layout'
/Users/kevin/.rvm/gems/ruby-1.9.2-p0/gems/actionpack-2.3.8/lib/action_view/base.rb:262:in `render'
/Users/kevin/.rvm/gems/ruby-1.9.2-p0/gems/actionpack-2.3.8/lib/action_controller/base.rb:1250:in `render_for_file'
/Users/kevin/.rvm/gems/ruby-1.9.2-p0/gems/actionpack-2.3.8/lib/action_controller/base.rb:942:in `render'
/Users/kevin/.rvm/gems/ruby-1.9.2-p0/gems/actionpack-2.3.8/lib/action_controller/benchmarking.rb:51:in `block in render_with_benchmark'
/Users/kevin/.rvm/gems/ruby-1.9.2-p0/gems/activesupport-2.3.8/lib/active_support/core_ext/benchmark.rb:17:in `block in ms'
/Users/kevin/.rvm/rubies/ruby-1.9.2-p0/lib/ruby/1.9.1/benchmark.rb:309:in `realtime'
/Users/kevin/.rvm/gems/ruby-1.9.2-p0/gems/activesupport-2.3.8/lib/active_support/core_ext/benchmark.rb:17:in `ms'
/Users/kevin/.rvm/gems/ruby-1.9.2-p0/gems/actionpack-2.3.8/lib/action_controller/benchmarking.rb:51:in `render_with_benchmark'
/Users/kevin/.rvm/gems/ruby-1.9.2-p0/gems/actionpack-2.3.8/lib/action_controller/mime_responds.rb:135:in `block in custom'
/Users/kevin/.rvm/gems/ruby-1.9.2-p0/gems/actionpack-2.3.8/lib/action_controller/mime_responds.rb:179:in `call'
/Users/kevin/.rvm/gems/ruby-1.9.2-p0/gems/actionpack-2.3.8/lib/action_controller/mime_responds.rb:179:in `block in respond'
/Users/kevin/.rvm/gems/ruby-1.9.2-p0/gems/actionpack-2.3.8/lib/action_controller/mime_responds.rb:173:in `each'
/Users/kevin/.rvm/gems/ruby-1.9.2-p0/gems/actionpack-2.3.8/lib/action_controller/mime_responds.rb:173:in `respond'
/Users/kevin/.rvm/gems/ruby-1.9.2-p0/gems/actionpack-2.3.8/lib/action_controller/mime_responds.rb:107:in `respond_to'
/Users/kevin/Sites/sample/app/controllers/main_controller.rb:7:in `index'

Ответы [ 5 ]

6 голосов
/ 19 августа 2010

Попробуйте добавить

# encoding: UTF-8
вверху файла main_controller.rb.Если это работает, вы имеете дело с символом ASCII, отличным от US, в вашем исходном файле.

В Ruby 1.9 мы имеем дело с тремя контекстами кодирования:

  • Кодировка исходного кода: Строки в исходном файле по умолчанию интерпретируются как US-ASCII, если только не присутствует магический комментарий, который я перечислю выше.
  • Внешняя кодировка: Предполагается, что символы в текстовом файле имеют ту же кодировку, что исреда.Однако можно указать кодировку для использования.Например: open (mydata.txt, "r: UTF-8").
  • Внутренняя кодировка: указывает, как кодируются текстовые данные после чтения из файла.По умолчанию это ноль, то есть это будет то же самое, что и кодировка, используемая для его чтения.Если требуется что-то другое, это можно указать в IO.open.Например: open (mydata.txt, 'r: UTF-8: UTF-16LE')

Для получения дополнительной информации я прочитал бы замечательные статьи Джеймса Эдварда Грея II накодирование.

5 голосов
/ 03 марта 2012

У меня были похожие проблемы в Ubuntu (11.10), потому что это было в моем / etc / apache2 / envvars:

## The locale used by some modules like mod_dav
export LANG=C
## Uncomment the following line to use the system default locale instead:
#. /etc/default/locale

Обмен комментариями на этот файл с использованием / etc / default / locale (который содержит LANG="en_US.UTF-8") решил проблему для меня без необходимости создания оболочки для моего рубина.

3 голосов
/ 08 сентября 2010

У меня была похожая проблема с другим сервером, и переменные среды оказались виновником .

2 голосов
/ 01 декабря 2010

Я согласен с pjmorse в отношении причины переменной среды, особенно в моей настройке Passenger / Rails, виновником было значение LANG.

При запуске приложения Rails через скрипт / сервер у меня был LANG =ru_CA.UTF-8, но не при открытии приложения с Passenger.

Решение: Измените конфигурацию Passenger, чтобы запустить Ruby с оболочкой, см. http://blog.phusion.nl/2008/12/16/passing-environment-variables-to-ruby-from-phusion-passenger/

Используйте это как оболочку:

#!/bin/sh
export LANG=en_CA.UTF-8
exec "/Your_Default_Ruby_Path/ruby" "$@"

Примечание. Your_Default_Ruby_Path - это то, что было в значении PassengerRuby файла http.conf до настройки оболочки.

1 голос
/ 19 августа 2010

Добро пожаловать в удивительный мир принудительного кодирования строк;ошибка в поведении Ruby 1.9.x по сравнению с Ruby 1.8.x в строках.

Проверка http://blog.phusion.nl/2009/02/02/getting-ready-for-ruby-191/ - может быть полезным.Возможно, вам просто нужно обновить ваш набор гемов.

...