Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google app engine 在本地主机上导航到/_ah/admin会产生未知的404错误_Google App Engine_Python 2.7 - Fatal编程技术网

Google app engine 在本地主机上导航到/_ah/admin会产生未知的404错误

Google app engine 在本地主机上导航到/_ah/admin会产生未知的404错误,google-app-engine,python-2.7,Google App Engine,Python 2.7,我目前正在将我的GAE应用程序移植到Python2.7上,遇到了一些令人兴奋的事情,我慢慢地一次解决一个(您好,别名为simplejson库!)。然而,我目前无法解释这个特殊问题 每当我导航到管理控制台时(http://localhost:8080/_ah/admin),我得到了404页。这本身就很奇怪(之前工作得很好),但它也不是我的自定义404页面。这让我觉得这是基于内置的处理程序,但我不确定原因是什么 其他有趣的事实: 在我的app.yaml或其他地方没有尝试处理/_ah/* 除了WSG

我目前正在将我的GAE应用程序移植到Python2.7上,遇到了一些令人兴奋的事情,我慢慢地一次解决一个(您好,别名为simplejson库!)。然而,我目前无法解释这个特殊问题

每当我导航到管理控制台时(http://localhost:8080/_ah/admin),我得到了404页。这本身就很奇怪(之前工作得很好),但它也不是我的自定义404页面。这让我觉得这是基于内置的处理程序,但我不确定原因是什么

其他有趣的事实:

  • 在我的app.yaml或其他地方没有尝试处理/_ah/*
  • 除了WSGI处理程序的常用脚本之外,my app.yaml中没有任何更改
  • 不使用联合登录
  • 随着时间的推移,我几乎打开了所有的内置设备
  • 应用程序部署正确且无问题
  • 我在OSX上使用GAE启动器(虽然很小,但它确实有一些奇怪的地方)
更新

仅仅显示即将发布的内容的控制台日志可能更容易。这是在应用程序完全启动之后,我尝试导航到管理页面两次(IO错误很可爱,只在初始时间发生):


因此,我最终找到了一些在Python2.5中工作得非常好的东西,但在Python2.7中仅使用dev_appserver时出现了问题


为了打开和关闭维护模式,我们通过直接更改
app.router
字段,在WSGI实例中重新分配路由以指向一组新的URL。通过检查应用程序版本禁用此代码路径可以使
/\u ah/admin
正常工作。

如果您找到此答案,并且正在使用或更高版本,默认URL已从
localhost:8080/\u ah/admin
更改为
localhost:8000
由于在
web.xml
文件中定义了URL筛选器,我遇到了相同的问题:

<filter>
    <filter-name>filter</filter-name>
    <filter-class>com.example.MyFilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>filter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>
上面代码中读取
|path.startsWith(“/_-ah”)
的部分解决了我的问题,因为过滤器必须允许以
/_-ah
开头的路径不变地通过


我需要过滤器,这样Jersey就可以在所有REST路径前面都没有
/res
web.xml

中指定的任何内容的情况下工作。服务器是否记录了失败的/\u ah/admin请求?我假设在该端口上对应用程序的其他请求都成功了?是的,但不是404。它与任何其他成功的页面都无法区分。端口上的其他请求确实成功。我们的404处理程序非常独特,因为它将异常级别的信息记录为页面呈现的一部分。您的应用程序中是否有对django的任何引用?我见过一些人报告错误,通常是因为安装了错误版本的django。事实上,我是这样做的。然而,我确实在“库”下设置了它,以使用django 1.2。主要是电子邮件正则表达式和其他一些东西。Dan道歉说,唯一没有被使用的是模板(现在是Mako)。当我说“不是404”时,我指的是我不习惯的。如日志所示,错误代码肯定是404
<filter>
    <filter-name>filter</filter-name>
    <filter-class>com.example.MyFilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>filter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>
@Override
public void doFilter(ServletRequest request, ServletResponse response,
        FilterChain chain) throws IOException, ServletException {
    HttpServletRequest req = (HttpServletRequest) request;
    String path = req.getRequestURI().substring(req.getContextPath().length());

    if (path.equals("/")) { // Welcome path
        request.getRequestDispatcher("/res/index").forward(request, response);
    } else if (path.startsWith("/static") || path.startsWith("/_ah")) { 
        // Static content or internal and admin stuff
        chain.doFilter(request, response); // Goes to default servlet.
    } else { // Jersey servlet controller
        request.getRequestDispatcher("/res" + path).forward(request, response);
    }

}