2015-10-19 68 views
1

我正在开发一个项目,我必须在文件系统上保存一些临时用户生成的文件。在我的开发环境中,我在根文件夹中创建了一个名为usr的文件夹,以及从文件夹读取和写入的用户相对路径。生产期间在Play框架中获取根文件夹?

但是,当我运行生产服务器使用/.activator start。该框架试图从root/target/universal/stage/usr中读取。

我甚至尝试使用Play.application.path.getPath,但我一直在获取相同的路径。

有没有办法让生产中的根文件夹?

谢谢

回答

2

您正在收到正确的根文件夹。 start命令的意义在于验证应用程序在生产中的运行方式。所以它构建应用程序,就像你将它推到prod时一样。然后“将其部署到prod” - 将其解包到target/universal/stage文件夹并从该文件夹运行应用程序。因此target/universal/stage是您正确的根文件夹。

采取立正 - 启动命令已过时:

[提醒]开始命令已被弃用,并将在游戏的 未来的版本中删除。

[警告]要在生产模式下运行Play,请改为运行 'stage',然后在 target/universal/stage/bin中执行生成的启动脚本。

[警告]要使用 生产模式测试您的应用程序,请运行'testProd'。

更新

您需要添加到build.sbt下一个代码

mappings in Universal ++= 
    (baseDirectory.value/"usr" * "*" get) map 
    (x => x -> ("usr/" + x.getName)) 

这样说SBT你的 “USR” 文件夹添加到 “生产包”(第一阶段) 。采取以关注 - 它不会“链接”,这将很难usr文件夹复制到target/universal/stage所以你必须target/universal/stage/usr那就是usr副本只是在运行命令之前start

+0

谢谢,这是我认为这是发生。那么你认为在'target/universal/stage'中包含我的'usr'文件夹而不是实际的根文件夹是一个好的解决方案吗? – danielz

+0

我认为最好的解决方案是将文件放入数据库。如果你想使用文件系统 - 使用你喜欢的路径。你的问题是你想从prod模式获取以开发模式上传的文件,这是两种不同的服务器环境。 –

+0

不幸的是,将文件放入数据库不是一个选项,我需要使用文件系统。是否有跨平台的方式来获取实际的根文件夹路径?我尝试过的每种方法都给了我'目标/通用/舞台',这从你的答案中是有道理的。但我正在寻找一种方法来获取项目的根路径,而无需对其进行硬编码。 – danielz

相关问题