ruby-on-rails – 重新加载rails中间件,而无需在开发中重新启动
发布时间:2020-12-16 19:11:59 所属栏目:百科 来源:网络整理
导读:我有一个rails 4应用程序,中间件位于lib / some / middleware.rb,它当前通过初始化器注入到堆栈中,如下所示: MyApp::Application.configure.do |config| config.middleware.use 'Some::Middleware'end 不幸的是,每当我改变一些东西,我需要重新启动服务器.如
我有一个rails 4应用程序,中间件位于lib / some / middleware.rb,它当前通过初始化器注入到堆栈中,如下所示:
MyApp::Application.configure.do |config| config.middleware.use 'Some::Middleware' end 不幸的是,每当我改变一些东西,我需要重新启动服务器.如何在开发模式下的每个请求上重新加载它?我已经看到类似的问题,关于在to_prepare块中使用自动加载或包装代码重新加载lib代码,但我不确定如何在这种情况下应用它. 谢谢, 更新#1 如果我尝试删除中间件然后在to_prepare块中重新添加它,我会收到错误“无法修改冻结的数组”. 解决方法
我认为在某些时候Rails足够聪明,可以在运行时替换中间件代码,但我可能错了.
这就是我想出来的,绕过Ruby类加载疯狂并利用Rails类重新加载. 将中间件添加到堆栈: # config/environments/development.rb [...] config.middleware.use "SomeMiddleware","some_additional_paramter" 使用自动重新加载,但要确保运行的rails实例和已经初始化的中间件对象“忘记”执行的实际代码: # app/middlewares/some_middleware.rb class SomeMiddleware def initialize(*args) @args = args end def call(env) "#{self.class}::Logic".constantize.new(*@args).call(env) end class Logic def initialize(app,additional) @app = app @additional = additional end def call(env) [magic] @app.call(env) end end end 逻辑上的更改应该通过每次请求上的rails自动重新加载来获取. 我认为这实际上可能成为一个有用的宝石! (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- Cocos2dx:用Photoshop自动创建CocosStudio.csd文件——coc
- Swift - 常用文件目录路径获取(Home目录,文档目录,缓存目
- Reactor与Proactor的概念
- 于数据交换格式XML和JSON的比较
- ruby-on-rails-3 – 防止rails生产日志交错来自不同请求的最
- C#多线程(11):线程等待
- ios – 如何在XCode 4.1中创建自定义可重用的UIControl
- ruby-on-rails – 带有bootstrap-sass的颜色变量
- 从命令行使用postgresql获取身份验证失败错误
- 使用Oracle,PHP和Oci8处理eacute和其他特殊字符