gpt4 book ai didi

ruby-on-rails - 在 Rails 中扩展 ruby​​ gem

转载 作者:行者123 更新时间:2023-12-04 13:15:20 25 4
gpt4 key购买 nike

假设我有一个 Rails 应用程序,它的大部分功能来自 gem(例如,CMS)。

如果我现在需要添加一些自定义(例如,向用户添加属性),那么最佳实践方法是什么?如果我自定义 gem,那么我将来会遇到更新 gem 的问题。

在这里采取的最佳方法是什么?

最佳答案

这个问题已经很老了,但我觉得它可以再充实一点。确实,您可以在运行时对 rails(和 ruby​​)进行修补。这意味着很容易重新打开一个类或模块并注入(inject)新代码。但是,由于在开发模式下进行的所有动态类加载和卸载,这在 Rails 中有些棘手。

我不会详细介绍,但您确实希望将扩展放入初始化程序或 gem 中,因为它们会在开发模式下的请求之间重新加载。如果您将代码放入插件中,它不会重新加载,并且您会收到非常神秘的错误,例如“XXX 的副本已从模块树中删除,但仍处于事件状态!”

最简单的做法是将代码放入初始化程序(例如 config/initializers/user_extensions.rb)。您可以只使用 class_eval 来注入(inject)代码。

User.class_eval do
... new code ...
end

ruby 可扩展性的一个主要缺点是跟踪代码的来源。您可能想要添加某种关于正在加载的扩展的日志消息,以便人们可以跟踪它。
Rails.logger.info "\n~~~ Loading extensions to the User model from #{ __FILE__ }\n"
User.class_eval do
... new code ...
end

进一步阅读:

http://airbladesoftware.com/notes/monkey-patching-a-gem-in-rails-2-3

关于ruby-on-rails - 在 Rails 中扩展 ruby​​ gem,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2012383/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com