我尝试将我的Play!Framework部署到Heroku,但我遇到以下错误:
app[web.1]: [error] application - Error reading filename: create_user.json
app[web.1]: [error] application - Error reading filename: delete_user.json
app[web.1]: [error] application - Error reading filename: login_user.json
...
我使用这些.json文件作为模式来验证来自客户端的输入。它们位于&app.93 / app / assets / json /'目录。 我猜他们根本没被推到Heroku,但我也不知道如何检查它。
我看到类似的问题,其中缺少的文件位于' public'目录,这样一个' git add -A'会解决问题:
Scala Play 2.1.0 - Assets not appearing on Heroku?
但是,它不适用于我的问题。
其他信息:播放2.2.2,MongoHQ,仅限服务器端。
提前感谢!
修改
stacktrace向我显示应用程序正在
中查找json文件/app/target/universal/stage/app/assets/json/
其中 / app 对应Heroku dyno中应用程序的默认根目录(使用&#39; heroku run bash&#39;进行检查), / target / universal / stage < / strong>在我的Procfile中定义,其余路径 / app / assets / json 是我的开发环境中的正确层次结构。显然,上面的路径并不存在于Heroku上。
我使用以下方法获取json文件:
Play.application().getFile("app/assets/json/create_user.json");
在开发环境中工作,但不在生产环境中工作。我也不知道如何在生产中访问这些文件。
答案 0 :(得分:4)
事实证明,玩!不允许在生产模式下进行此类操作
Play.application().getFile("app/assets/json/create_user.json");
据James Roper所说,here,“在Play中依赖文件系统是不好的做法”。
相反,应该在“公共”文件夹的“conf”中提供该文件,并将其作为资源加载。这些文件嵌入在打包的应用程序中。
由于他的解决方案是在Scala中,并且我已经找到了旧的Play!Framework 1.X的一些解决方案,我决定用Play发布实际上对我有用的内容! 2.2.2和Java 1.7:
Play.application().classloader().getResourceAsStream("json/create_user.json");
我的.json文件位于'conf / json'。