NoMethodError: неопределенный метод `eager_load_paths 'для # - PullRequest
0 голосов
/ 12 марта 2020

В моем приложении rails 6, работающем ruby 2.7, я пытаюсь загрузить все файлы, используя Zeitwerk. Вот фрагмент моего файла application.rb:

class Application < Rails::Application
config.load_defaults "6.0"
Zeitwerk::Loader.eager_load_all

# 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.

# Middlewares
config.middleware.insert 0, Rack::UTF8Sanitizer
config.middleware.use Rack::Attack
config.autoload_paths += Dir["#{config.root}/lib/**/*"]
config.autoload_paths += Dir["#{config.root}/app/models/**/*"]
config.autoload_paths += Dir["#{config.root}/app/observers/*"]
config.autoload_paths += Dir["#{config.root}/app/middleware/*"]
config.autoload_paths += Dir["#{config.root}/app/validators/**/*"]
config.autoload_paths += Dir["#{config.root}/app/**/concerns/*"]
config.autoload_paths += Dir["#{config.root}/app/operations/**/*"]
config.autoload_paths += Dir["#{config.root}/app/scrubbers/**/*"]
config.autoload_paths += Dir["#{config.root}/app/workers/**/*"]
config.paths.add "#{config.root}/app/operations/", eager_load: true

# Set Time.zone default to the specified zone and make Active Record auto-convert to this zone.
# Run "rake -D time" for a list of tasks for finding time zone names. Default is UTC.
config.time_zone = "UTC"

# The default locale is :en and all translations from config/locales/*.rb,yml are auto loaded.
config.i18n.load_path += Dir[Rails.root.join('config', 'locales', '**', '*.{rb,yml}')].reject { |f| File.fnmatch("#{Rails.root.to_s}/config/locales/**/x_*.yml", f) }
config.i18n.available_locales = [:"en", :"fr", :"fr_en"]
config.i18n.default_locale = :en

# Precompile additional assets.
# application.js, application.css, and all non-JS/CSS in app/assets folder are already added.
config.assets.precompile += ["public.css", "public.js", "public_payments.js", "email.css", "pdf.css", "pronotif.css"]

config.middleware.insert_before 0, Rack::Cors do
  allow do
    origins '*'
    resource '*', :headers => :any, :methods => [:get, :post, :options]
  end
end

end

Однако, когда я запускаю это, я получаю эту ошибку:

NoMethodError: undefined method `eager_load_paths' for #<I18n::Config:0x00007fceade8c0f0>

Любое решение для это будет полезно

1 Ответ

2 голосов
/ 04 апреля 2020

Проблема

Помимо того, что ваш application.rb не в хорошей форме (как @max упоминается в первом комментарии к вашему вопросу ), проблема заключается в том, что известные и уже исправлены для Rails.

К сожалению (на момент написания, с Rails 6.0.2.2) исправление в настоящее время не опубликовано c .

Временное решение

Но до тех пор вы можете скопировать исправленную задачу рейка в ваше приложение в файле с именем lib/tasks/local_zeitwerk.rake и изменить строку 41 до:

namespace :local_zeitwerk do

и затем выполните задачу проверки с помощью

bin/rails local_zeitwerk:check
...