使用Fixtures.loadModels(“...”)时文件位置有问题

时间:2011-06-08 03:44:48

标签: playframework

我正在使用Play Framework yabe 教程,并在添加标签时遇到了问题。我不确定我添加了哪些代码导致了更改,但现在Fixtures.loadModels(data.yml)代码在... / some_folder / play-1.2.1 / modules / docviewer / app中搜索文件/data.yml而不是... / some_folder / yabe_tutorial / conf / data.yml应该如此。

这是我在/ yabe_tutorial / app的默认包中的代码:

@OnApplicationStart
public class Bootstrap extends Job { 
  public void doJob() {
    if (User.count() == 0) {
        Fixtures.delete();
        Fixtures.loadModels("data.yml");
    }
  } 
}

我可以使用任何设置来更改loadModels使用的目录吗?

我对这一切都很陌生,所以我真的很感激一些帮助。谢谢!

2 个答案:

答案 0 :(得分:1)

Sigurd是对的。 Fixtures.loadModels()Play.javaPath中查找yml文件。尝试将data.yml文件重命名为data-appname.yml这样的唯一名称,并更改代码中的文件名。

@OnApplicationStart
public class Bootstrap extends Job { 
  public void doJob() {
    if (User.count() == 0) {
        Fixtures.loadModels("data-appname.yml");
    }
  } 
}

为我工作。

另一种选择是使用Play.applicationPath,其中包含项目根目录的位置

Fixtures.loadModels(Play.applicationPath + "/app/conf/data-appname.yml");

答案 1 :(得分:0)

在Fixtures类中加载Models时,它会扫描Play.javaPath列表中的所有目录。正常行为是javaPath包含应用程序的“app”和“conf”目录,即根目录(Play.applicationRoot,默认为“。”)。尝试调试并查看您的案例中包含的javaPath。 也许这段代码有助于:

    @Override
    public void doJob() {

        if (User.count() == 0) {
            VirtualFile appRoot = VirtualFile.open(Play.applicationPath);
            Play.javaPath.add(0, appRoot.child("conf"));
            Fixtures.loadModels("data.yml");
        }

    }

它将Play.javaPath新目录插入到路径顶部。无论如何,这段代码非常难看。