是否可以在sphinx.conf中使用相对路径?

时间:2014-08-14 15:52:33

标签: sphinx

我在Linux生产服务器上使用Sphinx以及运行WampServer的Windows开发机器。

sphinx.conf中的索引配置均需要输出文件名的path设置。由于生产服务器和开发机器上的文件系统不同,我必须有两行,然后根据我使用的服务器注释一行。

#path           = /path/to/folder/name #LIVE
path           = C:\wamp\www\site\path\to\folder\name #LOCALHOST

由于我有很多索引,每次我需要更新文件时,不得不经常评论和取消注释几十行。

使用相对路径将是理想的解决方案,但是当我尝试运行索引器时收到以下错误:

  

致命:无法打开../folder/name.tmp.spl:参数无效,不会索引。尝试 - 旋转选项。

是否可以在sphinx.conf中使用相对路径?

1 个答案:

答案 0 :(得分:2)

可以使用相对路径,但它有点棘手,因为各种实用程序将具有不同的工作目录。

例如在Windows上搜索服务,将启动IIRC,其工作目录为$ WINDIR $ \ System32

在Linux上,通过crontab,我认为它有以前遗留的工作目录,所以必须在实际的命令行中更改文件夹

...即它与配置文件无关,它相对于当前工作目录。


我个人使用版本控制系统(实际上是SVN)来管理它。 Dev的版本始终是提交到存储库的版本,LIVE服务器上的“工作副本”已将路径编辑到正确的位置。因此,当'更新'到最新文件时,只会合并更改,而本地文件路径将保持原样。


其他人使用动态配置文件。配置文件可以是一个脚本(php / python / perl等) - 但这只适用于linux,所以不会帮助你。


或者可以只有一个'发布'脚本。基本上,您可以编辑“主”配置文件,以及可以自由复制到所有服务器的配置文件。然后是一个'发布'脚本,它编写了适当的本地路径。它可以通过一些非常简单的搜索替换来实现。

<?php 

if (trim(`hostname`) == 'live') {
  $path = '/path/to/folder/';
} else {
  $path = 'C:\wamp\www\site\path\to\folder\`;
}

$contents = file_get_contents('sphinx.conf.master');
$contents = str_replace('$path',$path,$contents);
file_put_contents('sphinx.conf',$contents);

然后在主配置文件中有path = $path\name,当在本地计算机上运行脚本时,它将被替换为正确的路径