问题标签 [zeitwerk]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
ruby-on-rails - Rails 6 不加载引擎模块和类(Zeitwerk?)
在工作中,我们都有一个 Rails 应用程序“MyApplication”和一个为 MyApplication 提供实用程序的 gem/引擎“MyEngine”。MyEngine 的目的之一是修补 ruby 基类并使用与 MyApplication 相关的功能扩展它们(例如存储在 my_engine/app/monkeys/kernel.rb 中)。
使用我们当前的 rails 5.2.3 设置,在以下引擎配置下一切正常:
但是当将引擎连接到新的 Rails 6.1.0 版本的 MyApplication 时,类不再是 eager_loaded,猴子修补的方法会产生未定义的方法 NoMethodError。
我知道 Rails 6.0 及更高版本更改为使用 Zeitwerk 进行自动加载和急切加载常量,但不幸的是,在这种混乱中,我仍然无法以实际与 rails 6.1.0 一起使用的方式配置我的引擎。任何帮助或最广泛意义上的建议,将不胜感激!
ruby-on-rails - 为什么 Rails6+ 开始默认在 config/environments/* 中添加 activesupport 需求?
我对 Rails 版本升级有点晚了。令我惊讶的是 Rails 生成的 config/environment/* 文件中有一堆 active_support 要求。
它们是干什么用的?它与 Rails6 中引入的 Zeitwerk 有关吗?我不记得它们出现在旧版本的 Rails 中。
重现步骤:
我试图在 rails/rails CHANGELOG 和一些 git 责备中找到这个更新,但这并没有帮助。
ruby-on-rails - 无法自定义变形 (ID)
控制器:
我创建了一个初始化程序来自定义拐点:
错误:
灵感来自: https ://guides.rubyonrails.org/autoloading_and_reloading_constants.html#customizing-inflections
它不适用于 inflection.acronym('ID') 因为它会导致此错误:https ://github.com/rails/rails/issues/40068
ruby-on-rails - 运行 rake zeitwerk 时出错:使用 Zeitwerk Loader 通过从 Rails 引擎继承一个类作为 Rails 6 应用程序中的 gem 来签入模型
我在 Rails 应用程序中使用 Rails 引擎作为 Gem。现在,我在我的 rails 应用程序模型中从 rails 引擎继承了一个类。
1. Rails 应用模型代码
但是rake zeitwerk:check
在终端中运行命令时,我收到了一个错误,即
未初始化的常量 <class:32323332xx> EngineModuleTwo
现在我检查了 EngineClassOne 的 Rails 引擎代码,其中有一个 EngineModuleTwo 的包含语句。
2. Rails 引擎类代码
引擎文件结构:
为什么它无法加载模块,任何人都可以解释如何在我的 rails 应用程序中使用它时将模块加载到 rails 引擎中吗?
ruby-on-rails - 如何在命名空间视图中访问 ApplicationHelper 方法?
我在 app/helpers/application_helper.rb 中有一个模块 ApplicationHelper 定义如下
我有我的视图文件在这里
所以我正在尝试访问
一些方法()
在视图文件中,但它没有反映!这是由于命名空间吗?或者我无法理解的。如果有人解释这个概念,那就太好了。提前致谢!
它说未定义的方法错误可能是什么原因?
ruby-on-rails - 为什么 app 初始化后 object_id 会发生变化?
导轨 6.1.4.1
我正在从初始化文件设置值,当我请求页面时,我发现object_id
配置更改(并且值丢失),除非我require 'my_library'
在初始化文件中这样做。我不明白为什么?
应用程序/lib/feature_flags.rb:
配置/初始化程序/feature_flags.rb:
输出:
我的问题是:
- 为什么我需要
require 'feature_flags'
在初始化器中使 object_id 不改变?我认为 Zeitwerk 正在处理这个问题。 - 这就是我应该做的(做正确的事)吗?
谢谢你的帮助!
ruby-on-rails - 无法在测试文件夹下使用紧凑样式的模块和类 (NameError)
我有文件夹内幕test/fixtures/schemas
,我在其中定义了一些用于验证某些控制器的 JSON 响应的模式,如下所示:
下面的文件fixtures/schemas/client/show.rb
如下所示:
它工作正常,我可以在我的测试中使用这个模式,Clients::Show
但我们还有一个 rubocop 规则,它强制我们使用紧凑的模块和类样式,如下所示:
但是当我这样定义它时,我得到一个NameError
我觉得奇怪的是一种结构有效而另一种无效。我通读了 Zeitwerk 手册,但无法解释我的问题,并尝试了不同的方法,例如client.rb
使用空模块定义文件,但它不起作用。
ruby-on-rails - Rails Zeitwerk蛇盒
当我们在 app/ 下有一个目录时,我们希望 Zeitwerk 可以使用它,并说命名恰好是这样的
然后 Zeitwerk 正在寻找一些具有某些模块或类 Graphql 的模块 Stuff。但在我的代码中,我总是将我的模块和类编写为 GraphQL 以匹配该约定。所以 Zeitwerk 现在正在抛出 Zeitwerk::NameError ,因为它试图使用代码。我不想使用 Stuff::GraphqlError,我想使用 Stuff::GraphQLError。我如何在这里欺骗 Zeitwerk?
ruby-on-rails - Rails 7 和 Zeitwerk 未在测试中加载
我的 Rails 7,Ruby 3.1 应用程序有一个失败的简单测试。我不明白为什么。
在我的应用程序中,我添加了一个标记为 stuff 的支持目录,其中包含一些 GraphQL 代码。所以在我的测试中,我想做一个 GraphQL.test(foo: "me", bar: "you")。
在我的 inflections.rb 初始化程序中,我教我想要的屈折。
在我的 application.rb 中,我告诉 Zeitwerk 我有东西要处理,而 rake 任务 zeitwerk:check 说一切都很好。
graphql.rb 有一个简单的测试函数:
但是我的测试运行了,在测试这段代码时,在没有测试方法的 GraphQL 上测试失败。
我对自动加载和急切加载感到困惑,为什么我的测试似乎无法遵循这里的简单设置。