Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.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
Heroku 播放框架重定向错误_Heroku_Playframework_Routes_Playframework 1.x - Fatal编程技术网

Heroku 播放框架重定向错误

Heroku 播放框架重定向错误,heroku,playframework,routes,playframework-1.x,Heroku,Playframework,Routes,Playframework 1.x,在本地(在windows上)开发我的测试应用程序时,我的应用程序运行良好,没有问题 在部署到heroku(使用git)并调用特定GET之后,我收到了一个错误。我花了很多时间试图调试这个无法在本地重现的问题,我找到了导致它的区域(通过注释/取消注释代码区域) 以下是在heroku上不起作用的代码: public static void compose(){ compose(""); } public static void compose(String

在本地(在windows上)开发我的测试应用程序时,我的应用程序运行良好,没有问题

在部署到heroku(使用git)并调用特定GET之后,我收到了一个错误。我花了很多时间试图调试这个无法在本地重现的问题,我找到了导致它的区域(通过注释/取消注释代码区域)

以下是在heroku上不起作用的代码:

public static  void  compose(){
        compose("");
}

public static  void  compose(String content){
        render(content);
}
将上述内容更改为:

 public static  void  compose(){
        String content = "";
        renderTemplate("Application/compose.html",content);
    }
    public static  void  compose(String content){
        renderTemplate("Application/compose.html",content);
    }
应用程序在heroku上运行良好

以下是异常(从第一个代码segmant生成的异常)

请求获取/撰写的内部服务器错误(500) 2012-03-03T10:37:14+00:00应用程序[网站1]:@69hmkdf00 2012-03-03T10:37:14+00:00应用程序[web.1]: 2012-03-03T10:37:14+00:00应用程序[web.1]:Oops:意外异常 2012-03-03T10:37:14+00:00应用程序[web.1]:发生异常导致的意外错误意外异常:意外错误 2012-03-03T10:37:14+00:00应用程序[web.1]:play.exceptions.UnexpectedException:意外错误 2012-03-03T10:37:14+00:00应用程序[web.1]: 2012-03-03T10:37:14+00:00应用程序[web.1]:在播放中.vfs.VirtualFile.contentAsString(VirtualFile.java:180) 2012-03-03T10:37:14+00:00应用程序[web.1]:在游戏中.templates.TemplateLoader.load(TemplateLoader.java:69) 2012-03-03T10:37:14+00:00应用程序[web.1]:在游戏中.templates.TemplateLoader.load(TemplateLoader.java:172) 2012-03-03T10:37:14+00:00应用程序[web.1]:at play.mvc.Controller.renderTemplate(Controller.java:640) 2012-03-03T10:37:14+00:00应用程序[web.1]:at play.mvc.Controller.render(Controller.java:695) 2012-03-03T10:37:14+00:00应用程序[web.1]:at play.mvc.Controller.renderTemplate(Controller.java:659) 2012-03-03T10:37:14+00:00应用程序[web.1]:at controllers.Application.compose(Application.java:92) 2012-03-03T10:37:14+00:00应用程序[web.1]:at play.mvc.ActionInvoker.invokeWithContinuation(ActionInvoker.java:548) 2012-03-03T10:37:14+00:00应用程序[web.1]:at play.mvc.ActionInvoker.invoke(ActionInvoker.java:502) 2012-03-03T10:37:14+00:00应用程序[web.1]:在游戏中.mvc.ActionInvoker.invokeControllerMethod(ActionInvoker.java:478) 2012-03-03T10:37:14+00:00应用程序[web.1]:在游戏中.mvc.ActionInvoker.invokeControllerMethod(ActionInvoker.java:473) 2012-03-03T10:37:14+00:00应用程序[web.1]:at play.mvc.ActionInvoker.invoke(ActionInvoker.java:161) 2012-03-03T10:37:14+00:00应用程序[web.1]:在Invocation.HTTP请求时(播放!) 2012-03-03T10:37:14+00:00应用程序[web.1]:在播放中.vfs.VirtualFile.inputstream(VirtualFile.java:111) 2012-03-03T10:37:14+00:00应用程序[web.1]:在播放中.vfs.VirtualFile.contentAsString(VirtualFile.java:178) 2012-03-03T10:37:14+00:00应用程序[web.1]:原因:play.exceptions.Unexpected异常:意外错误 2012-03-03T10:37:14+00:00应用程序[web.1]:。。。还有12个 2012-03-03T10:37:14+00:00应用程序[web.1]:由以下原因引起:java.io.FileNotFoundException:/app/app/views(是一个目录) 2012-03-03T10:37:14+00:00应用程序[web.1]:位于java.io.FileInputStream。(FileInputStream.java:137) 2012-03-03T10:37:14+00:00应用程序[web.1]:位于java.io.FileInputStream.open(本机方法) 2012-03-03T10:37:14+00:00应用程序[web.1]:。。。还有13个 2012-03-03T10:37:14+00:00应用程序[web.1]:正在播放.vfs.VirtualFile.inputstream(VirtualFile.java:109) 路由文件相关行

*/compose Application.compose

我的问题是
  • 我做错了什么(为什么我做了改变来修复它)
  • 为什么它不在本地繁殖

如果您喜欢更改,上述代码应该可以正常工作

public static  void  compose(){
        String a = "";
        compose(a);
}

public static  void  compose(String content){
        render(content);
}

因为在呈现HTML之前,它需要为空字符串保留一些内存。

在Play framework 1.2.x版本中,呈现方法源如下所示:

protected static void render(Object... args) {
    String templateName = null;
    if (args.length > 0 && args[0] instanceof String && LocalVariablesNamesTracer.getAllLocalVariableNames(args[0]).isEmpty()) {
        templateName = args[0].toString();
    } else {
        templateName = template();
    }
    renderTemplate(templateName, args);
}
可以看到,如果第一个参数是字符串,并且它与局部变量的名称不匹配,则会将其解释为模板名称。因此,将静态空字符串作为第一个参数传递就像请求以空名称呈现模板一样-因此出现“未找到文件(…是目录)”错误

事实上,如果有一个具有任意名称的局部变量,并将该变量作为参数传递,应该可以让它工作

似乎:

String tmp = "anything";
render(tmp);

render("anything");

第二个调用将显式查找名为“anything”的模板。

这很奇怪。如果在
prod
模式下本地运行,是否可以重现错误?FileNotFoundException用于/app/app/views,这很奇怪。附加/应用程序来自哪里?hmmmm@JamesWard我在本地(在生产模式下)尝试了,但没有再现。只是猜测,但在生产模式下设置
http.path
可能会解决问题?我尝试了重新创建问题,但无法使其在本地工作。检查并让我知道,如果你可以让这个工作在同样的方式,你以前做。谢谢
render("anything");