2

在我修改视图和控制器中的代码后,Rails 不需要重新启动。Python web 框架中是否也存在这些功能?

我之前尝试过 Flask 和 Pyramid。我知道如果我只更改了它们就不需要重新启动template,但如果我更改了views(类似于controllersin rails)则必须重新启动它们。重新启动需要几秒钟才能完成。

我记得,rails即使我在controllers. 有没有人知道 Python Web 框架中是否也存在这样的功能?

4

2 回答 2

3

Pyramid 有一个选项可以在更改文件后自动重启服务器:

pserve development.ini --reload

我确信每个项目文档都为您的问题提供了分析器

Django 也可以(你的问题中没有要求)

于 2013-01-03T14:32:00.757 回答
2

Rails 实现了开发时重载,如下所示。有两种机制在起作用。

  1. 每当代码引用不存在的类时,就可以调用回调 (const_missing)。Rails 安装了这样的回调。在此回调中,它会检查在应用程序加载路径之一(例如,在 app/models 中)是否存在相应的类,加载它并继续。这种机制称为“Rails 自动加载”(不要与不同的 Ruby 自动加载混淆)。
  2. Rails 跟踪哪些类已被自动加载。在请求结束时,它会从内存中删除所有这些类。

显然,这有一些局限性。如果您的代码将内容存储在全局变量中,那么 Rails 不会在请求结束时清除它们,因此如果您的全局变量不断增长,您将在开发过程中泄漏内存。重新加载还会导致生产中的开发在语义上的细微差别。而像

scope :older_than_one_year, where('date < ?', 1.year.ago)

在开发中按预期工作(因为模型在每次请求时重新加载,导致 1.year.ago 不断重新评估),它在生产中无法按预期工作(因为 1.year.ago 只评估一次,因此如果您的应用程序已经运行了一年,那么该范围实际上转换为2年前)。

我不知道是否可以在 Python 中实现某些东西,我不熟悉 Python 的即时类创建/修改/删除功能,或者它是否有任何类似于 const_missing 的钩子。

于 2013-01-03T15:05:08.097 回答