使用RAM索引设置的Grails Searchable插件会丢失部署到Cloud Foundry

时间:2013-01-09 00:31:58

标签: grails cloudfoundry searchable grails-searchable searchable-plugin

我正在向Cloud Foundry部署Grails应用程序,其中可搜索插件'compassConnection'设置为使用RAM索引。问题是Cloud Foundry应用了一些神奇的自动配置来设置'compassConnection'以使用基于文件的索引。

如果我使用基于磁盘的索引并且Cloud Foundry需要重新配置以使其在其环境中工作,那就没关系了,但我希望RAM索引配置保持不变。

任何想法如何使我的工作?

感谢, 奥利

1 个答案:

答案 0 :(得分:2)

我在浏览AbstractCloudBeanPostprocessor中的Cloud Foundry插件源代码后找到了问题的原因。填充罗盘连接的方法不会检查它是否是RAM索引,而是盲目地将其设置为磁盘上的某个位置。

    /**
 * Update the location of the Searchable Lucene index.
 * @param beanFactory the Spring bean factory
 * @param appConfig the application config
 */
protected void fixCompass(ConfigurableListableBeanFactory beanFactory, ConfigObject appConfig) {
    def compassBean = beanFactory.getBeanDefinition('compass')
    String indexLocation = getCompassIndexRootLocation(appConfig) + '/searchable-index'
    appConfig.searchable.compassConnection = indexLocation
    compassBean.propertyValues.addPropertyValue 'compassConnection', indexLocation
    log.debug "Updated Compass connection details: $indexLocation"
}

我认为这应该检查是否存在RAM索引并仅将其设置为磁盘位置。一种可能的解决方法是创建我自己的BeanDefinitionRegistryPostProcessor并撤消云代工厂插件的功能。