使用 ruflin/elastica 重置索引会在 heroku 上抛出 HttpException
Resetting indexes with ruflin/elastica throws HttpException on heroku
我在一个 Symfony 项目中使用 elasticsearch 和 FOSElasticaBundle, that requires ruflin/elastica client. In order to create indexes I use the command suggested in the documentation FOSElasticaBundle,在我的本地机器上一切正常。
当我将项目部署到 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 elasticsearch 服务,以及所有具有不同版本的捆绑包和 ruflin/elastica 客户端。
问题恢复:主机一直运行良好,但 ruflin 客户端似乎无法联系到它。
我唯一能想到的是包的配置错误,但我按照文档中的每一步操作,所以我不知道去哪里看,此刻我感到迷茫。
编辑:
我只是在本地 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 是正确的 运行ning。
您的配置是什么样的?可能是 HTTP 身份验证弄乱了事情。 docs 建议使用这样的东西:
# app/config/config.yml
fos_elastica:
clients:
default:
host: your-bonsai-cluster.some-region.bonsai.io
port: 443
username: 'a1b2c3d4'
password: 'e5f6g7h8'
我使用以下配置解决了这个问题:
clients:
default:
host: ****
port: ****
transport: Https
headers:
Authorization: "Basic ************"
其中提供授权令牌的地方:
echo -n "user:password" | base64
盆景还支持9200端口和80端口连接。使用80端口可以避免SSL错误。
我在一个 Symfony 项目中使用 elasticsearch 和 FOSElasticaBundle, that requires ruflin/elastica client. In order to create indexes I use the command suggested in the documentation FOSElasticaBundle,在我的本地机器上一切正常。
当我将项目部署到 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 elasticsearch 服务,以及所有具有不同版本的捆绑包和 ruflin/elastica 客户端。
问题恢复:主机一直运行良好,但 ruflin 客户端似乎无法联系到它。
我唯一能想到的是包的配置错误,但我按照文档中的每一步操作,所以我不知道去哪里看,此刻我感到迷茫。
编辑: 我只是在本地 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 是正确的 运行ning。
您的配置是什么样的?可能是 HTTP 身份验证弄乱了事情。 docs 建议使用这样的东西:
# app/config/config.yml
fos_elastica:
clients:
default:
host: your-bonsai-cluster.some-region.bonsai.io
port: 443
username: 'a1b2c3d4'
password: 'e5f6g7h8'
我使用以下配置解决了这个问题:
clients:
default:
host: ****
port: ****
transport: Https
headers:
Authorization: "Basic ************"
其中提供授权令牌的地方:
echo -n "user:password" | base64
盆景还支持9200端口和80端口连接。使用80端口可以避免SSL错误。