Nei*_*ton 6 rubygems ruby-on-rails
假设我有一个Rails应用程序,它可以从gem中获取大部分功能(例如,CMS).
如果我现在需要添加一些自定义(例如,向用户添加属性),这样做的最佳实践方法是什么?如果我自定义gem,那么我将来会有更新gem的问题.
在这里采取的最佳方法是什么?
Jam*_*s H 17
这个问题很老了,但我觉得它可以使用更多的充实.确实,你可以在运行时monkeypatch rails(和ruby).这意味着重新打开类或模块并注入新代码很容易.但是,由于所有动态类加载和卸载都在开发模式下,这在rails中有点棘手.
我不会详细介绍,但您确实希望将扩展程序放入初始化程序或gem中,因为它们在开发模式下的请求之间重新加载.如果你将代码放入插件中,它将不会被重新加载,你会得到非常神秘的错误,例如"XXX的副本已从模块树中删除但仍处于活动状态!"
最简单的方法是将代码放入初始化程序(例如config/initializers/user_extensions.rb).您可以使用class_eval注入代码.
User.class_eval do
... new code ...
end
Run Code Online (Sandbox Code Playgroud)
ruby可扩展性的一个主要缺点是追踪代码来自何处.您可能希望添加有关正在加载的扩展的某种日志消息,以便人们可以跟踪它.
Rails.logger.info "\n~~~ Loading extensions to the User model from #{ __FILE__ }\n"
User.class_eval do
... new code ...
end
Run Code Online (Sandbox Code Playgroud)
进一步阅读:
http://airbladesoftware.com/notes/monkey-patching-a-gem-in-rails-2-3
| 归档时间: |
|
| 查看次数: |
4520 次 |
| 最近记录: |