Проблемы с работой ActiveRecord во FreeBSD (iconv)
Написал я небольшое приложение на Ruby с использованием движка Ramaze, оттестировал и решил что пора ставить его «в живую».
Поставить приложение решил на FreeBSD сервер, для работы нужен был gem ActiveRecord (куда без него). При запуске любой программы использующей ActiveRecord я получал такую ошибку:
i18n_interpolation_deprecation.rb:23:in `<class:Simple>': undefined method `alias_method_chain' for I18n::Backend::Simple:Class (NoMethodError) |
Гугление по ошибке навело меня на страницу блога: http://john.vipvip.com/blog/?p=71, приведенный солюшн мне не подходил т.к. предпологалось что я ставил Ruby из портов, а у меня был Ruby 1.9-1 из сорсов с официального сайта.
Стало понятно главное – проблема в iconv модуле для Ruby, как оказалось в архиве Ruby есть такая папка ext/iconv/, но почему-то по умолчанию в файле ext/Setup, iconv закомментирован(за подробностями в файл README). Когда я убрал комментарии и еще раз попытался собрать Ruby iconv опять не собрался
Опять таки путем гугуления нашел следующие два треда:
http://groups.google.com/group/emm-ruby/browse_thread/thread/e4aa78aa9c1e4c9d
http://groups.google.com/group/emm-ruby/browse_thread/thread/e77c51cfd7589f51
То-ли FreeBSD`ный линковщик не добавлял кое-какие папки в опции сборки, то-ли Ruby не до конца сконфигурирован для сборки во FreeBSD, в общем родился маленький хак для нормальной сборки iconv + ruby. Редактируем файл ext/iconv/extconf.rb, после все «require» блоков добавляем две строки:
$LIBS << " -L/usr/local/lib " $CFLAGS << " -I/usr/local/include " |
Еще раз пытаемся собрать Ruby и сдеать make install, теоретически iconv должен собраться
P.S.
Возможно вам понадобится предварительно поставить iconv из портов:
cd /usr/ports/converters/iconv/ make install clean |