【问题标题】:how to tell my rails app to use new version of code in lib folder?如何告诉我的 Rails 应用程序使用 lib 文件夹中的新版本代码?
【发布时间】:2011-12-09 00:09:45
【问题描述】:

我想知道这是否特定于 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

【问题讨论】:

  • 您的config/environments/development.rb 文件中有什么内容?请给我们看一下好吗?
  • 当然,但那是 20 多行,你能说得更具体点吗?
  • 也许是这个? config.action_controller.perform_caching = false
  • 如果更改配置,则必须重新启动服务器。如果您不是说您配置,请添加更多详细信息
  • @Lichtamberg:“我正在修改的代码在我的 lib 文件夹中”来自 OP。

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


【解决方案1】:

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

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

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

【讨论】:

  • 这似乎成功了。我记得读过它,但我将“require_dependency”读为“require”并想“嘿,我已经有了!”
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-08
  • 2015-01-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多