Устаревшее приложение Rails и ошибка Ruby 2: невозможно загрузить переводы из файла, тип yml неизвестен
У меня есть старое Rails-приложение, которое я хочу обновить до последних версий Rails и Ruby. Для начала я пытаюсь настроить приложение на Ruby 2.1.2.
$ rails -v
Rails 2.3.18
$ ruby -v
ruby 2.1.2p95 (2014-05-08 revision 45877) [i686-linux]
Когда я попытался запустить задачу грабли rake db:schema:load RAILS_ENV=test
Я столкнулся со следующей ошибкой
can not load translations from /activesupport-2.3.18/lib/active_support/locale/en.yml, the file type yml is not known
В поисках через Google я нашел следующую ссылку https://github.com/rails/rails/issues/10514 которой упоминалось, что существует несовместимость между версиями Rails 2.3 и Ruby 2+.
Кто-нибудь может помочь мне в применении обезьяньего патча, упомянутого в ссылке?
Спасибо джинеш
1 ответ
Наконец-то исправили ошибку
can not load translations from /activesupport-2.3.18/lib/active_support/locale/en.yml, the file type yml is not known
путем обезьяньего исправления метода I18n::Backend::Base#load_file(filename) Rails.
Решение заключается в следующем:
1.1 Создан файл с именем ruby2.rb
в / config / initializers
1.2 Добавлено следующее содержание /config/initializers/ruby2.rb
if Rails::VERSION::MAJOR == 2 && RUBY_VERSION >= '2.0.0'
module I18n
module Backend
module Base
def load_file(filename)
type = File.extname(filename).tr('.', '').downcase
# As a fix added second argument as true to respond_to? method
raise UnknownFileType.new(type, filename) unless respond_to?(:"load_#{type}", true)
data = send(:"load_#{type}", filename) # TODO raise a meaningful exception if this does not yield a Hash
data.each { |locale, d| store_translations(locale, d) }
end
end
end
end
end
1.3 Наконец-то побежал
$ rake db:schema:load RAILS_ENV=test
и схема была успешно загружена.
Самые полезные ссылки, которые я смог найти и которые помогли мне найти решение: