【问题标题】:Where is the default path to the apache lucene index file with grails searchable plugin?带有 grails 可搜索插件的 apache lucene 索引文件的默认路径在哪里?
【发布时间】:2011-12-31 20:56:36
【问题描述】:

我在我的 grails 1.3.7 项目中使用可搜索插件。我的项目运行良好,直到我的 macbooks 硬盘驱动器已满并且 osx 抛出有关内存问题的消息,并且它将删除一些文件(tmp 等)(之后我删除了一些电影并获得了超过 10GB 的可用空间)。我没有更改源代码,但是当我现在启动我的 grails 应用程序时,出现以下异常:

Running Grails application..
Configuring Spring Security ...
Configuring SpringSocial Facebook
2011-11-18 01:54:16,804 [main] ERROR context.GrailsContextLoader  - Error executing        bootstraps: Failed to retrieve transaction locks; nested exception is java.io.IOException:    Permission denied
org.compass.core.engine.SearchEngineException: Failed to retrieve transaction locks; nested exception is java.io.IOException: Permission denied
java.io.IOException: Permission denied
at java.io.UnixFileSystem.createFileExclusively(Native Method)
at java.io.File.createNewFile(File.java:883)
at org.apache.lucene.store.SimpleFSLock.obtain(SimpleFSLockFactory.java:144)
at org.apache.lucene.store.Lock.obtain(Lock.java:73)
at org.compass.core.lucene.engine.manager.DefaultLuceneSearchEngineIndexManager$6.doInTransaction(DefaultLuceneSearchEngineIndexManager.java:203)
at org.compass.core.impl.DefaultCompass$CompassTransactionContext.execute(DefaultCompass.java:423)
at org.compass.core.lucene.engine.manager.DefaultLuceneSearchEngineIndexManager.doOperate(DefaultLuceneSearchEngineIndexManager.java:197)
at org.compass.core.lucene.engine.manager.DefaultLuceneSearchEngineIndexManager.doReplaceIndex(DefaultLuceneSearchEngineIndexManager.java:266)
at org.compass.core.lucene.engine.manager.DefaultLuceneSearchEngineIndexManager.replaceIndex(DefaultLuceneSearchEngineIndexManager.java:261)
at org.compass.gps.impl.SingleCompassGps.doIndex(SingleCompassGps.java:118)
at org.compass.gps.impl.AbstractCompassGps.index(AbstractCompassGps.java:154)
at org.compass.gps.impl.AbstractCompassGps.index(AbstractCompassGps.java:128)
at grails.plugin.searchable.internal.compass.CompassGpsUtils.index(CompassGpsUtils.java:49)
at grails.plugin.searchable.internal.compass.CompassGpsUtils$index.call(Unknown Source)
at SearchableGrailsPlugin$_closure3.doCall(SearchableGrailsPlugin.groovy:158)
at org.grails.tomcat.TomcatServer.start(TomcatServer.groovy:212)
at grails.web.container.EmbeddableServer$start.call(Unknown Source)
at _GrailsRun_groovy$_run_closure5_closure12.doCall(_GrailsRun_groovy:158)
at _GrailsRun_groovy$_run_closure5_closure12.doCall(_GrailsRun_groovy)
at _GrailsSettings_groovy$_run_closure10.doCall(_GrailsSettings_groovy:280)
at _GrailsSettings_groovy$_run_closure10.call(_GrailsSettings_groovy)
at _GrailsRun_groovy$_run_closure5.doCall(_GrailsRun_groovy:149)
at _GrailsRun_groovy$_run_closure5.call(_GrailsRun_groovy)
at _GrailsRun_groovy.runInline(_GrailsRun_groovy:116)
at _GrailsRun_groovy.this$4$runInline(_GrailsRun_groovy)
at _GrailsRun_groovy$_run_closure1.doCall(_GrailsRun_groovy:59)
at RunApp$_run_closure1.doCall(RunApp:33)
at gant.Gant$_dispatch_closure5.doCall(Gant.groovy:381)
at gant.Gant$_dispatch_closure7.doCall(Gant.groovy:415)
at gant.Gant$_dispatch_closure7.doCall(Gant.groovy)
at gant.Gant.withBuildListeners(Gant.groovy:427)
at gant.Gant.this$2$withBuildListeners(Gant.groovy)
at gant.Gant$this$2$withBuildListeners.callCurrent(Unknown Source)
at gant.Gant.dispatch(Gant.groovy:415)
at gant.Gant.this$2$dispatch(Gant.groovy)
at gant.Gant.invokeMethod(Gant.groovy)
at gant.Gant.executeTargets(Gant.groovy:590)
at gant.Gant.executeTargets(Gant.groovy:589)
Application context shutting down...
Application context shutdown.

我认为文件系统中的 lucene 索引有问题,但我在哪里可以找到它? lucene 索引文件夹或文件存储在哪里?我没有更改插件配置。

【问题讨论】:

    标签: grails groovy lucene searchable compass-lucene


    【解决方案1】:

    根据default conf file

    /**
     * The location of the Compass index
     *
     * Examples: "/home/app/compassindex", "ram://app-index" or null to use the default
     *
     * The default is "${user.home}/.grails/projects/${app.name}/searchable-index/${grails.env}"
     */
    

    所以除非你改变了它(你说你没有),我会看看

    ~/.grails/projects/${app.name}/searchable-index/${grails.env}
    

    【讨论】:

    • 我没有更改它并且我已经查看了该路径,它不存在并且在启动我的应用程序时不会被创建。那么问题可能出在哪里?
    【解决方案2】:

    由于我的 tomcat 安装在 ${user.home}/.grails/projects/${app.name}/searchable-index ,请记住 tomcat 进程可能在与您不同的用户下运行,所以我运行“sudo nautilus”能够看到它

    【讨论】:

      【解决方案3】:

      看起来像是某种 Unix/OS X 权限问题。当 Searchable/Lucene 启动并尝试创建索引时,它所做的第一件事就是在索引目录中创建一个锁定文件。从您的堆栈跟踪来看,这似乎是失败的原因。

      Searchable.groovy 文件是定义索引路径的地方;它可能已在 environment 块中被覆盖,甚至可能在 Config.groovy 中。

      grails run-app 以您的用户身份运行 Grails,因此问题与以其他用户身份运行的 Tomcat 无关。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2023-03-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-04-10
        • 2011-05-02
        相关资源
        最近更新 更多