如何告诉我的rails应用程序在lib文件夹中使用新版本的代码?

时间:2011-12-09 00:09:46

标签: ruby-on-rails ruby-on-rails-3 windows-7

我想知道这是否特定于Win7。我有一个应用程序。我在运行时遇到异常。然后我更改了已损坏的代码行并再次发送Post(通过与页面交互,因为它是PRG,而不是命中F5)。但是,我仍然得到同样的例外。我通过更改一些日志消息测试了这一点并得到了相同的结果:没有看到新代码。

我正在改变的代码在我的lib文件夹中。这肯定是问题所在。但是我在我的application.rb中有这个:config.autoload_paths << 'lib'config.autoload_paths += Dir["#{config.root}/lib/**/"] - 看起来它覆盖了它(可能两次)。

我在这些帖子中尝试了解决方案:

Rails3 not reloading code in lib while in development mode

Rails 3 - how to refresh updated code

两个人都没有工作。我能看到的唯一区别是我正在运行调试器而且我在Win7上。如果我重新启动Mongrel,则使用新代码。

如何在不重新启动的情况下让Rails运行时使用新代码?

作为参考,这是我在启动调试器时看到的:

Fast Debugger (ruby-debug-ide 0.4.17.beta8, ruby-debug-base 0.11.30.pre3) listens on 127.0.0.1:19223
=> Booting Mongrel
=> Rails 3.1.1 application starting in development on http://127.0.0.1:3001
=> Call with -d to detach
=> Ctrl-C to shutdown server

1 个答案:

答案 0 :(得分:3)

据我所知,/lib中的代码默认加载一次,当服务器启动时只加载一次。因此,如果您更改/lib文件夹中的代码,则需要重新启动服务器以查看更改。

如果您想在每个请求中加载代码,请使用require_dependency http://apidock.com/rails/v3.1.0/ActiveSupport/Dependencies/Loadable/require_dependency

当然,您只想在开发模式下使用require_dependency,在测试和生产模式下使用正常的require