我们有一个rails 5.2.8.1应用程序和一个正在try 升级到rails 6.1的应用程序.我们已经设法使应用程序在本地运行,只出现了一些小问题.

然而,推送到我们的配置项(CirclCI),我们在预编译assets资源 时遇到错误. 错误在于zeitwerk加载器(加载一次)想要管理actiontext-6.1.7/app/helpers个已经由缺省主加载器管理的加载器.

奇怪的是,我们根本不使用一次加载加载器..

loader setup in application.rb

    config.autoload_paths += %W[
      #{config.root}/lib
      #{config.root}/lib/simple_form
      #{config.root}/app/jobs
      #{config.root}/app/jobs/concerns
      #{config.root}/app/controllers/concerns
      #{config.root}/app/mailers/concerns
      #{config.root}/app/models/concerns
      #{config.root}/app/models/reports
      #{config.root}/app/services/pdf_data
      #{config.root}/app/presenters
      #{config.root}/app/assets/templates
      #{config.root}/app/event_handlers
      #{config.root}/app/queries
      #{config.root}/app/concepts
      #{config.root}/vendor/
      #{config.root}/app/pdfs
    ]

    config.eager_load_paths += %W[
      #{config.root}/lib
    ]

error printout:

#!/bin/bash -eo pipefail
WEBPACKER_PRECOMPILE=false RAILS_NO_DB=true bundle exec rake assets:precompile --trace
** Invoke assets:precompile (first_time)
** Invoke assets:environment (first_time)
** Execute assets:environment
** Invoke environment (first_time)
** Execute environment
rake aborted!
Zeitwerk::Error: loader

#<Zeitwerk::Loader:0x000055eb81710b98
 @autoloaded_dirs=[],
 @autoloads={},
 @collapse_dirs=#<Set: {}>,
 @collapse_glob_patterns=#<Set: {}>,
 @eager_load_exclusions=#<Set: {}>,
 @eager_loaded=false,
 @ignored_glob_patterns=#<Set: {}>,
 @ignored_paths=#<Set: {}>,
 @inflector=ActiveSupport::Dependencies::ZeitwerkIntegration::Inflector,
 @initialized_at=2022-12-07 14:27:29.123263169 +0000,
 @logger=nil,
 @mutex=#<Thread::Mutex:0x000055eb81710738>,
 @mutex2=#<Thread::Mutex:0x000055eb81710710>,
 @namespace_dirs={},
 @on_load_callbacks={},
 @on_setup_callbacks=[],
 @on_unload_callbacks={},
 @reloading_enabled=false,
 @roots={},
 @setup=false,
 @shadowed_files=#<Set: {}>,
 @tag="rails.once",
 @to_unload={}>


wants to manage directory /home/circleci/flightlogger-rails/vendor/bundle/ruby/2.7.0/gems/actiontext-6.1.7/app/helpers, which is already managed by

#<Zeitwerk::Loader:0x000055eb81712f88
 @autoloaded_dirs=[],
 @autoloads={},
 @collapse_dirs=#<Set: {}>,
 @collapse_glob_patterns=#<Set: {}>,
 @eager_load_exclusions=
  #<Set: {"/home/circleci/flightlogger-rails/lib/simple_form",
   "/home/circleci/flightlogger-rails/app/models/reports",
   "/home/circleci/flightlogger-rails/app/assets/templates",
   "/home/circleci/flightlogger-rails/vendor"}>,
 @eager_loaded=false,
 @ignored_glob_patterns=#<Set: {}>,
 @ignored_paths=#<Set: {}>,
 @inflector=ActiveSupport::Dependencies::ZeitwerkIntegration::Inflector,
 @initialized_at=2022-12-07 14:27:29.122727016 +0000,
 @logger=nil,
 @mutex=#<Thread::Mutex:0x000055eb81712ab0>,
 @mutex2=#<Thread::Mutex:0x000055eb81712a88>,
 @namespace_dirs={},
 @on_load_callbacks={},
 @on_setup_callbacks=[],
 @on_unload_callbacks={},
 @reloading_enabled=false,
 @roots=
  {"/home/circleci/flightlogger-rails/lib"=>Object,
   "/home/circleci/flightlogger-rails/lib/simple_form"=>Object,
   "/home/circleci/flightlogger-rails/app/jobs"=>Object,
   "/home/circleci/flightlogger-rails/app/jobs/concerns"=>Object,
   "/home/circleci/flightlogger-rails/app/controllers/concerns"=>Object,
   "/home/circleci/flightlogger-rails/app/mailers/concerns"=>Object,
   "/home/circleci/flightlogger-rails/app/models/concerns"=>Object,
   "/home/circleci/flightlogger-rails/app/models/reports"=>Object,
   "/home/circleci/flightlogger-rails/app/presenters"=>Object,
   "/home/circleci/flightlogger-rails/app/assets/templates"=>Object,
   "/home/circleci/flightlogger-rails/app/event_handlers"=>Object,
   "/home/circleci/flightlogger-rails/app/queries"=>Object,
   "/home/circleci/flightlogger-rails/app/concepts"=>Object,
   "/home/circleci/flightlogger-rails/vendor"=>Object,
   "/home/circleci/flightlogger-rails/app/pdfs"=>Object,
   "/home/circleci/flightlogger-rails/app/associations"=>Object,
   "/home/circleci/flightlogger-rails/app/channels"=>Object,
   "/home/circleci/flightlogger-rails/app/controllers"=>Object,
   "/home/circleci/flightlogger-rails/app/decorators"=>Object,
   "/home/circleci/flightlogger-rails/app/forms"=>Object,
   "/home/circleci/flightlogger-rails/app/graphql"=>Object,
   "/home/circleci/flightlogger-rails/app/graphql/concerns"=>Object,
   "/home/circleci/flightlogger-rails/app/helpers"=>Object,
   "/home/circleci/flightlogger-rails/app/interactors"=>Object,
   "/home/circleci/flightlogger-rails/app/mailers"=>Object,
   "/home/circleci/flightlogger-rails/app/models"=>Object,
   "/home/circleci/flightlogger-rails/app/permitters"=>Object,
   "/home/circleci/flightlogger-rails/app/policies"=>Object,
   "/home/circleci/flightlogger-rails/app/public_api"=>Object,
   "/home/circleci/flightlogger-rails/app/serializers"=>Object,
   "/home/circleci/flightlogger-rails/app/services"=>Object,
   "/home/circleci/flightlogger-rails/app/validators"=>Object,
   "/home/circleci/flightlogger-rails/vendor/bundle/ruby/2.7.0/gems/jquery-minicolors-rails-2.2.6.2/app/inputs"=>
    Object,
   "/home/circleci/flightlogger-rails/engines/sms/app/concerns"=>Object,
   "/home/circleci/flightlogger-rails/engines/sms/app/controllers"=>Object,
   "/home/circleci/flightlogger-rails/engines/sms/app/helpers"=>Object,
   "/home/circleci/flightlogger-rails/engines/sms/app/inputs"=>Object,
   "/home/circleci/flightlogger-rails/engines/sms/app/mailers"=>Object,
   "/home/circleci/flightlogger-rails/engines/sms/app/models"=>Object,
   "/home/circleci/flightlogger-rails/vendor/bundle/ruby/2.7.0/gems/sentry-rails-5.6.0/app/jobs"=>
    Object,
   "/home/circleci/flightlogger-rails/vendor/bundle/ruby/2.7.0/gems/react_on_rails-13.1.0/app/helpers"=>
    Object},
 @setup=false,
 @shadowed_files=#<Set: {}>,
 @tag="rails.main",
 @to_unload={}>

推荐答案

问题是,将vendor添加到main自动加载机的自动加载路径.它不应该在那里.

操作文本配置once自动加载机(here),但使用您的配置它不能这样做,因为main管理vendor(因此管理它的所有后代).

您的配置不应该添加vendor,因为vendor/bundle不打算定义Bundle模块,对吗?该目录不应由应用程序自动加载.

依赖项会自行加载.

除了从配置中删除vendor个目录之外,您还应该删除这些由Rails自动添加的冗余目录:

#{config.root}/app/jobs
#{config.root}/app/controllers/concerns
#{config.root}/app/models/concerns
#{config.root}/app/presenters
#{config.root}/app/event_handlers
#{config.root}/app/queries
#{config.root}/app/concepts
#{config.root}/app/pdfs

Ruby-on-rails相关问答推荐

在数组中定位不匹配的索引

Rails 7.1.3如何在生产环境中查看堆栈跟踪

有什么办法能把这写清楚吗?

未捕获语法错误:try 编辑TRIX时,请求的模块未在Rails 7.1中提供名为默认的导出(在youtube.js:1:8)

Rails版本7.1.2:当验证失败且控制器发送422状态时,JS停止工作

如何在 JR gem 中指定每个资源的最大页面大小配置

Grape api (rails) - 未初始化常量 Endpoints::TodoAPI (NameError)

Sidekiq with Rails - 控制台与 rake 任务中的不同 Sidekiq 实例

从Rails中的字符串中间提取子字符串

ViewModel 和 Controller 有什么区别?

Rails:序列化数据库中的对象?

无法连接 localhost:3000 ruby​​ on rails in vagrant

如何为 Rails SimpleForm Select 框设置默认 Select 值

Rails:文件路径

Rails(或 Ruby):Yes/No 而不是 True/False

使用 oauth 和 twitter ruby​​ gem 时不断收到 OAuth::Unauthorized 错误

Rspec 与 TestUnit

Rails - 具有空数组的强参数

Rails:如何修复‘生产’环境缺少 secret_key_base

非持久 ActiveRecord 模型属性