使用ruflin / elastica重置索引会在heroku上引发HttpException

时间:2017-04-04 19:54:42

标签: elasticsearch elastica foselasticabundle httpexception bonsai-elasticsearch

我在FOSElasticaBundle的Symfony项目中使用elasticsearch,需要ruflin/elastica个客户端。为了创建索引,我使用FOSElasticaBundle的command suggested in the documentation,在我的本地机器上一切正常。

当我将项目部署到heroku时,同样的命令无法抛出以下错误:

elastica.ERROR: Elastica Request Failure {"exception":"[object] (Elastica\\Exception\\Connection\\HttpException(code: 0): Couldn't resolve host at /app/vendor/ruflin/elastica/lib/Elastica/Transport/Http.php:186)","request":{"path":"index_name/","method":"DELETE","data":[],"query":[],"connection":{"config":{"headers":[],"curl":[]},"host":"https://username:password@host","port":"443","logger":"fos_elastica.logger","compression":false,"retryOnConflict":0,"enabled":false}},"retry":false} 

这似乎强调了与elasticsearch主机的连接问题。奇怪的是,当我尝试从heroku机器手动连接到该主机时,一切似乎都运行正常。

执行:

curl -X GET host:port/

给了我这样的答复:

{
    "name" : "Alex Power",
    "cluster_name" : "elasticsearch",
    "version" : {
        "number" : "2.4.0",
        "build_hash" : "079e104a99267f24d3689297eb16466170b00ebc",
        "build_timestamp" : "2016-10-04T20:50:33Z",
        "build_snapshot" : false,
        "lucene_version" : "5.5.2"
    },
    "tagline" : "You Know, for Search"
}

在heroku上我使用bonsai add-on,但我也尝试使用AWS弹性搜索服务,以及使用不同版本的捆绑包和ruflin / elastica客户端的所有内容。

恢复问题:主机始终正常工作,但ruflin客户端似乎遇到问题。

我唯一可以考虑的是捆绑包的配置错误,但是我遵循了文档中的每一步,所以我不知道在哪里看,我现在感到迷茫。< / p>

修改: 我只是将项目设置为在本地和日志中的docker容器中运行,我看到以下错误:

[2017-04-08 09:45:00] request.CRITICAL: Uncaught PHP Exception Elastica\Exception\Connection\HttpException: "Couldn't connect to host, Elasticsearch down?" at /var/www/vendor/ruflin/elastica/lib/Elastica/Transport/Http.php line 180 {"exception":"[object] (Elastica\\Exception\\Connection\\HttpException(code: 0): Couldn't connect to host, Elasticsearch down? at /var/www/vendor/ruflin/elastica/lib/Elastica/Transport/Http.php:180)"} []

我一直在想,这只是一个配置问题,因为我检查了curl并且elasticsearch运行正常。

3 个答案:

答案 0 :(得分:3)

我使用以下配置解决了这个问题:

clients: default: host: **** port: **** transport: Https headers: Authorization: "Basic ************"

授权令牌的位置为:

echo -n "user:password" | base64

答案 1 :(得分:0)

您的配置是什么样的?可能是HTTP身份验证正在弄乱事情。 docs建议使用以下内容:

# app/config/config.yml
fos_elastica:
    clients:
        default:
            host: your-bonsai-cluster.some-region.bonsai.io
            port: 443
            username: 'a1b2c3d4'
            password: 'e5f6g7h8'

答案 2 :(得分:0)

盆景还支持通过端口9200和端口80进行连接。使用端口80可以避免SSL错误。