Ruby on rails 在不重新启动的情况下调试Rails应用程序

Ruby on rails 在不重新启动的情况下调试Rails应用程序,ruby-on-rails,ruby,ruby-on-rails-4,redmine,webrick,Ruby On Rails,Ruby,Ruby On Rails 4,Redmine,Webrick,我正在调试rails应用程序(Redmine),每次我更改插件路由或库中修补基类的内容时,我都必须重新启动rails服务器,即使它处于关闭缓存的开发模式等 这就是我的服务器的外观: rails s => Booting WEBrick => Rails 3.2.16 application starting in development on http://0.0.0.0:3000 => Call with -d to detach => Ctrl-C to shutdo

我正在调试rails应用程序(Redmine),每次我更改插件路由或库中修补基类的内容时,我都必须重新启动rails服务器,即使它处于关闭缓存的开发模式等

这就是我的服务器的外观:

rails s
=> Booting WEBrick
=> Rails 3.2.16 application starting in development on http://0.0.0.0:3000
=> Call with -d to detach
=> Ctrl-C to shutdown server
[2017-02-02 17:06:18] INFO  WEBrick 1.3.1
[2017-02-02 17:06:18] INFO  ruby 2.1.8 (2015-12-16) [x86_64-darwin15.0]
[2017-02-02 17:06:18] INFO  WEBrick::HTTPServer#start: pid=12042 port=3000

有没有人知道有什么方法可以强制应用程序部分重新加载受影响的类或具有此类更改的类?

rails的启动过程需要相当长的时间。大部分时间是由于加载gem依赖项。如果您希望在每次请求时都这样做,那么有一些方法可以做到如下所述:

由于初始化器只在初始化期间运行,所以rails不重新运行它们是有意义的。如果你依赖于猴子补丁,这里有一些方法可以解决


    • 在rails中,启动过程需要相当长的时间。大部分时间是由于加载gem依赖项。如果您希望在每次请求时都这样做,那么有一些方法可以做到如下所述:

      由于初始化器只在初始化期间运行,所以rails不重新运行它们是有意义的。如果你依赖于猴子补丁,这里有一些方法可以解决


        • Redmine插件通常不是Ruby gems,而是位于Rails主应用程序的文件夹中

          只要插件作者遵循一些Rails最佳实践,Rails的自动加载也应该(也将)与Redmine插件一起工作。需要注意的基本事项是:

          • 正确的命名和命名空间-具有与模块对应的子目录以及与它们声明的类/模块对应的文件名,即
            Foo::Bar::Baz
            位于
            lib/Foo/Bar/Baz.rb
          • 从不需要手动加载,但让Rails自动加载所有内容
          • 在自动重新加载过程中,请注意何时何地修补程序,以便重新应用修补程序
          如果插件作者遵循这些规则,插件的代码很可能会自动加载并重新加载。一个例外是插件的
          init.rb
          ,但在插件开发过程中这通常不会经常改变

          实际上,许多Redmine插件由于违反这些规则而破坏了自动加载。症状可能是没有自动重新加载,甚至在尝试重新加载时出现应用程序错误,导致应用程序在生产模式下工作正常,但在开发模式下第一次成功请求后失败

          通常,只要重新组织插件代码以符合Rails的期望并删除require语句,就可以解决此类问题


          更改插件声明的路由需要重新启动服务器。然而,我不知道如何使用Redmine自动重新加载这些路由。

          Redmine插件通常不是Ruby gems,而是位于Rails主应用程序内的文件夹中

          只要插件作者遵循一些Rails最佳实践,Rails的自动加载也应该(也将)与Redmine插件一起工作。需要注意的基本事项是:

          • 正确的命名和命名空间-具有与模块对应的子目录以及与它们声明的类/模块对应的文件名,即
            Foo::Bar::Baz
            位于
            lib/Foo/Bar/Baz.rb
          • 从不需要手动加载,但让Rails自动加载所有内容
          • 在自动重新加载过程中,请注意何时何地修补程序,以便重新应用修补程序
          如果插件作者遵循这些规则,插件的代码很可能会自动加载并重新加载。一个例外是插件的
          init.rb
          ,但在插件开发过程中这通常不会经常改变

          实际上,许多Redmine插件由于违反这些规则而破坏了自动加载。症状可能是没有自动重新加载,甚至在尝试重新加载时出现应用程序错误,导致应用程序在生产模式下工作正常,但在开发模式下第一次成功请求后失败

          通常,只要重新组织插件代码以符合Rails的期望并删除require语句,就可以解决此类问题


          更改插件声明的路由需要重新启动服务器。然而,我不知道如何使用Redmine自动重新加载这些路由。

          您可能从Redmine插件的init.rb文件加载补丁。 在他们周围放置以下物品是一种良好的做法:

          使用此回调,将在开发模式下的每个请求之前重新应用补丁

          以下是一个例子:

          require 'redmine'
          ActionDispatch::Reloader.to_prepare do
            require_dependency 'redmine_multiprojects_issue/issue_patch'
            require_dependency 'redmine_multiprojects_issue/issues_helper_patch'
            require_dependency 'redmine_multiprojects_issue/issues_controller_patch'
          end
          Redmine::Plugin.register :redmine_multiprojects_issue do
            ...
          end
          

          请注意,如果更改路由,您仍然必须重新启动服务器。

          您可能从Redmine插件的init.rb文件加载修补程序。 在他们周围放置以下物品是一种良好的做法:

          使用此回调,将在开发模式下的每个请求之前重新应用补丁

          以下是一个例子:

          require 'redmine'
          ActionDispatch::Reloader.to_prepare do
            require_dependency 'redmine_multiprojects_issue/issue_patch'
            require_dependency 'redmine_multiprojects_issue/issues_helper_patch'
            require_dependency 'redmine_multiprojects_issue/issues_controller_patch'
          end
          Redmine::Plugin.register :redmine_multiprojects_issue do
            ...
          end
          

          请注意,如果更改路由,您仍然必须重新启动服务器。

          Rails应用程序的某些方面仅在服务器启动时执行/解释,如初始值设定项等。Rails应用程序的某些方面仅在服务器启动时执行/解释,如初始值设定项等。您好,感谢headstart。。。你能举几个例子吗。原因是,我一直需要init.rb中的补丁,以及rails*to_prepare事件完成时应用的补丁。问题是,你不应该手动要求任何东西。有了正确的命名和名称空间,即使使用
          require\u依赖项
          也不是必需的。虽然如果你不得不这样做,后者总是更好的,因为它不会破坏Rails的代码重新加载。嗨,谢谢你的启动。。。你能举几个例子吗