webapp2:自动重新加载代码更改

时间:2013-04-13 01:27:23

标签: python django google-app-engine webapp2

我正在使用webapp2进行Web开发。在我的开发环境中,如何让它自动重新加载代码更改?我正在使用httpserver.serve(app, host='127.0.0.1', port='8008'),但每次更改代码时,我都需要停止服务器并重新启动它。

我已将webapp2与Google提供的Google App Engine启动器结合使用,每次进行更改时都不需要重新启动它。他们是如何做到的呢?他们是否监控文件系统更改并在发生更改时调用模块上的reload

2 个答案:

答案 0 :(得分:1)

原来Google提供的Google App Engine启动器正在借用Django框架的自动加载代码,具体如下:https://github.com/django/django/blob/master/django/utils/autoreload.py

搜索了Stackoverflow,并提供了一些相关问题,提供了答案: How to automatically reload Django when files change? 反过来又与该模块相关联,该模块能够检测并重新加载已更改的代码:https://github.com/tjwalch/django-livereload-server

如果有人想了解我如何做的更多细节。

在我的发射器中:

public class IntegrationServiceLoader {
    public static <T> ServiceLoader<T> loadIntegrations(Path path, Class<T> clazz) {
        List<URL> fileNames = new ArrayList<>();
        try (DirectoryStream<Path> directoryStream = Files.newDirectoryStream(path)) {
            for (Path each : directoryStream) {
                fileNames.add(each.toUri().toURL());
            }
        } catch (IOException ex) {
        }
        URL[] array = fileNames.stream().toArray(size -> new URL[size]);
        ClassLoader cl = new URLClassLoader(array, IntegrationServiceLoader.class.getClassLoader());
        return ServiceLoader.load(clazz, cl);
    }
}

autoreloader.py:

import autoreloader,thread
thread.start_new_thread(autoreloader.reloader_thread, ())
...
app = webapp2.WSGIApplication(...)
def main():
    from paste import httpserver
    httpserver.serve(app, ...)

答案 1 :(得分:0)

粘贴有其自身的自动重装功能(也许在提供原始答案时就不存在了。)

app = webapp2.WSGIApplication(...)
def main():
    from paste import httpserver, reload
    reload.install()
    httpserver.serve(app, ...)

然后仅使用Paste提供的shell脚本启动服务器:

err=3
while test "$err" -eq 3 ; do
    python server.py
    err="$?"
done

现在,每次在项目中编辑文件时,服务器都会自动重新加载。

参考文档: