我正在使用webapp2进行Web开发。在我的开发环境中,如何让它自动重新加载代码更改?我正在使用httpserver.serve(app, host='127.0.0.1', port='8008')
,但每次更改代码时,我都需要停止服务器并重新启动它。
我已将webapp2与Google提供的Google App Engine启动器结合使用,每次进行更改时都不需要重新启动它。他们是如何做到的呢?他们是否监控文件系统更改并在发生更改时调用模块上的reload
?
答案 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
现在,每次在项目中编辑文件时,服务器都会自动重新加载。
参考文档: