#ruby-on-rails #internationalization #activesupport
Вопрос:
Я использую Rails 5.2.3 с Ruby 2.6.5.
Без видимой причины, внезапно я получаю ошибки, связанные с I18n с active_support. У меня нет никакого желания заниматься интернационализацией, и я был бы вполне доволен без каких-либо следов этого. Я понимаю, что это в какой-то степени встроено, но не могу понять, почему вдруг возникла следующая ошибка. Последней операцией, которую я выполнил, было изменение конфигурации приложения, чтобы включить файл схемы sql. Я отказался от этого изменения безрезультатно. Я не могу сейчас мигрировать или даже запустить сервер.
16: from bin/rails:4:in `lt;maingt;' 15: from bin/rails:4:in `require' 14: from /home/lloydo/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/gems/railties-5.2.3/lib/rails/commands.rb:3:in `lt;top (required)gt;' 13: from /home/lloydo/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/gems/railties-5.2.3/lib/rails/commands.rb:3:in `require' 12: from /home/lloydo/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/gems/railties-5.2.3/lib/rails/command.rb:3:in `lt;top (required)gt;' 11: from /home/lloydo/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/gems/railties-5.2.3/lib/rails/command.rb:3:in `require' 10: from /home/lloydo/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/gems/activesupport-5.2.3/lib/active_support.rb:27:in `lt;top (required)gt;' 9: from /home/lloydo/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/gems/activesupport-5.2.3/lib/active_support.rb:27:in `require' 8: from /home/lloydo/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/gems/activesupport-5.2.3/lib/active_support/dependencies/autoload.rb:3:in `lt;top (required)gt;' 7: from /home/lloydo/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/gems/activesupport-5.2.3/lib/active_support/dependencies/autoload.rb:3:in `require' 6: from /home/lloydo/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/gems/activesupport-5.2.3/lib/active_support/inflector/methods.rb:3:in `lt;top (required)gt;' 5: from /home/lloydo/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/gems/activesupport-5.2.3/lib/active_support/inflector/methods.rb:3:in `require' 4: from /home/lloydo/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/gems/activesupport-5.2.3/lib/active_support/inflections.rb:3:in `lt;top (required)gt;' 3: from /home/lloydo/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/gems/activesupport-5.2.3/lib/active_support/inflections.rb:3:in `require' 2: from /home/lloydo/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/gems/activesupport-5.2.3/lib/active_support/inflector/inflections.rb:6:in `lt;top (required)gt;' 1: from /home/lloydo/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/gems/activesupport-5.2.3/lib/active_support/inflector/inflections.rb:6:in `require' /home/lloydo/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/gems/activesupport-5.2.3/lib/active_support/i18n.rb:15:in `lt;top (required)gt;': uninitialized constant I18n (NameError)
Когда я запускаю пакет, он сообщает мне, что используется i18n:
Using rake 13.0.6 Using concurrent-ruby 1.1.9 Using i18n 1.8.11 Using minitest 5.14.4 Using thread_safe 0.3.6 Using tzinfo 1.2.9
Просматривая файл-нарушитель, я ожидаю, что это последняя строка, вызывающая проблему:
# frozen_string_literal: true require "active_support/core_ext/hash/deep_merge" require "active_support/core_ext/hash/except" require "active_support/core_ext/hash/slice" begin require "i18n" rescue LoadError =gt; e $stderr.puts "The i18n gem is not available. Please add it to your Gemfile and run bundle install" raise e end require "active_support/lazy_load_hooks" ActiveSupport.run_load_hooks(:i18n) I18n.load_path lt;lt; File.expand_path("locale/en.yml", __dir__)
У меня есть файл en.yml, расположенный в папке locale.
Я также обновил свою версию пакета с 2.2.29 до 2.2.31 — на случай, если это фактор?
application.rb, как показано ниже:
require_relative 'boot' require 'rails/all' # Require the gems listed in Gemfile, including any gems # you've limited to :test, :development, or :production. Bundler.require(*Rails.groups) module Gybm class Application lt; Rails::Application # Initialize configuration defaults for originally generated Rails version. config.load_defaults 5.0 # Settings in config/environments/* take precedence over those specified here. # Application configuration can go into files in config/initializers # -- all .rb files in that directory are automatically loaded after loading # the framework and any gems in your application. config.autoload_paths = %W(#{config.root}/lib) config.active_record.schema_format = :sql end end
Комментарии:
1. Спасибо за ваш быстрый ответ…был добавлен.
2. Привет @dbugger, спасибо, спасибо, спасибо…ты привел меня к ответу. Думая о файле gem, я подумал о версии ruby, которая была using…it что-то не совсем сходилось. Где-то на этом пути я закончил с настройкой ruby 2.6.5… Я не могу понять, почему и когда. Это должно было быть на 2.5.7. Установка этого на место заставила меня снова встать и работать. В данный момент я нахожусь в процессе переписывания в RoR 6 , так что это останется только до тех пор, пока я не закончу.
Ответ №1:
Версия Ruby была непреднамеренно обновлена намного позже используемой первоначальной версии. Это было сделано не намеренно, что и вызвало проблему. Возвращение версии ruby к оригиналу решило проблему.