Hi dears , meilisearch giving such error when search (request type post) **Fatal error: Uncaught Meilisearch InvalidResponseBodyException: Http Status: 405 thrown in /var/www/html/vendor/meilisearch/meilisearch-php/src/Http/Client.php on line 186** This error dont giving in meilisearch itself servise (related 127.0.0.1:7700) VPS info: **4 cores | RAM 8 GB | 100 GB (100% NVMe) | 200 Mbit/s** - OS: [Ubuntu 22] - Meilisearch version: [v.0.28.1] - meilisearch-php version: [packagist v0.24.0]
Last active 5 months ago
27 replies
32 views
- BR
Hi @rzakhanov!
Can you give some examples of how you are making the request? The 405 errors on Meilisearch are common when there is a mismatch between meilisearch-php version (latest 0.24.0) and the Meilisearch engine on 0.27.
- RZ
I found solution . Problem at /src/Endpoints/Indexes.php in 180 line:
This was get method. Example: $this->http->post i changed this to $this->http->get and this worked. Because in your documentation meilisearch updateFilterableAttributes and updateSearchableAttributes method related GET method but in php package was POST . Need fix that. But have new problem again :(
public function rawSearch(?string $query, array $searchParams = []): array { $parameters = array_merge( ['q' => $query], $searchParams ); return $this->http->get(self::PATH.'/'.$this->uid.'/search', $parameters); }
- RZ
New problem errors
Fatal error: Uncaught TypeError: Cannot assign null to property MeiliSearch\Search\SearchResult::$nbHits of type int in /var/www/html/vendor/meilisearch/meilisearch-php/src/Search/SearchResult.php:49 Stack trace: #0 /var/www/html/vendor/meilisearch/meilisearch-php/src/Endpoints/Indexes.php(175): MeiliSearch\Search\SearchResult->_construct(Array) #1 /var/www/html/vendor/WEBSOFT/Services/Competition/ContextService/StoreModules/Core/MeiliSearch.php(69): MeiliSearch\Endpoints\Indexes->search('s22', Array) #2 /var/www/html/vendor/WEBSOFT/Http/Models/Competition/Main.php(53): vendor\WEBSOFT\Services\Competition\ContextService\StoreModules\Core\MeiliSearch->search('s22', 1, 1, NULL, NULL) #3 /var/www/html/vendor/WEBSOFT/Http/Controllers/Competition/ListProducts/Run.php(384): vendor\WEBSOFT\Http\Models\Competition\Main->searchFirstSimilar('s22', 1, true, NULL, NULL) #4 /var/www/html/vendor/WEBSOFT/Http/Controllers/Competition/ListProducts/Run.php(398): vendor\WEBSOFT\Http\Controllers\Competition\ListProducts\Run->vendor\WEBSOFT\Http\Controllers\Competition\ListProducts{closure}('s22', 1, true, NULL, NULL) #5 [internal function]: vendor\WEBSOFT\Http\Controllers\Competition\ListProducts\Run->saveProduct() #6 /var/www/html/app/Core/Main/Engine.php(244): calluserfuncarray(Array, Array) #7 /var/www/html/app/Run/Conf.php(142): Core\Main\Engine::AppStart() #8 /var/www/html/index.php(11): require_once('/var/www/html/aโฆ') #9 {main} thrown in /var/www/html/vendor/meilisearch/meilisearch-php/src/Search/SearchResult.php on line 49 - BR
I'm still not getting what's going on in your case. Sorry about that.
Can you check again which version of the Meilisearch engine you are using? To do that, you can check here https://docs.meilisearch.com/reference/api/version.html#get-version-of-meilisearch
And I want to ensure you have the latest meilisearch-php version 0.24.0, can you share this file with me
/src/MeiliSearch.php
from your local vendor? - RZ
I didn't find problem, but i solved it with custom native curl library in php. For example i using now such code
return json_decode( $this->customRequest('/indexes/products/search', ['q' => $query,'filter'=> $filter],'POST'),true)['hits']?:[];
at the moment this working. But problem unfortunately it remains.. :(
- RZ
This is customRequest function source:
public function customRequest($path = null, $params = [], $method = 'GET') { $curl = curl_init(); curl_setopt($curl, CURLOPT_URL, MEILISEARCH_CONNECT . '/' . $path); curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, 0); curl_setopt($curl, CURLOPT_TIMEOUT, 25); //timeout in seconds curl_setopt($curl, CURLOPT_CUSTOMREQUEST, strtoupper($method)); if ($params) { curl_setopt($curl, CURLOPT_HTTPHEADER, [ "content-type: application/json; charset=UTF-8", "Authorization: Bearer " . MEILISEARCH_MASTER_KEY, ]); #curl_setopt($curl, CURLOPT_POSTFIELDS,http_build_query($params)); curl_setopt($curl, CURLOPT_POSTFIELDS, (is_string($params) ? $params : json_encode($params))); } $res = curl_exec($curl); curl_close($curl); return $res; }
- RZ
I'm still not getting what's going on in your case. Sorry about that.
Can you check again which version of the Meilisearch engine you are using? To do that, you can check here https://docs.meilisearch.com/reference/api/version.html#get-version-of-meilisearch
And I want to ensure you have the latest meilisearch-php version 0.24.0, can you share this file with me
/src/MeiliSearch.php
from your local vendor?Yes of course man : Meilisearch source is:
<?php declare(strict_types=1); namespace MeiliSearch; class MeiliSearch { public const VERSION = '0.23.2'; public static function qualifiedVersion() { return sprintf('Meilisearch PHP (v%s)', MeiliSearch::VERSION); } }
- BR
If you want to use a plain curl is up to you, but the idea of our SDKs is to help you integrate with Meili easily :)
So, I spotted some trouble in your environment.
First, you must use a version of the Meilisearch engine that is compatible with meilisearch-php. So if you have the engine version 0.27, you should stay on the version of meilisearch-php you have.
But I assume you are using the new version of Meili, so you should run
composer update meilisearch/meilisearch-php
to get the meilisearch-phpv0.24.0
, this should solve your problem.Btw: Our docs only show the latest version of the Meilisearch engine, that's why you got these issues ๐.
- RZ
If you want to use a plain curl is up to you, but the idea of our SDKs is to help you integrate with Meili easily :)
So, I spotted some trouble in your environment.
First, you must use a version of the Meilisearch engine that is compatible with meilisearch-php. So if you have the engine version 0.27, you should stay on the version of meilisearch-php you have.
But I assume you are using the new version of Meili, so you should run
composer update meilisearch/meilisearch-php
to get the meilisearch-phpv0.24.0
, this should solve your problem.Btw: Our docs only show the latest version of the Meilisearch engine, that's why you got these issues smile.
I will check in next project :) Thanks for helping again ! :)
- ER
Hi @brunoocasali
I have same trouble:MeiliSearch\Exceptions\InvalidResponseBodyException
MeiliSearch\Http\Client::parseResponse
vendor/meilisearch/meilisearch-php/src/Http/Client.php:186Package version: "0.28.1"
"meilisearch/meilisearch-php": "^0.24.1",$client = new \MeiliSearch\Client(config('scout.meilisearch.host'), config('scout.meilisearch.key'));
$index = $client->index('movies_index_new');
$index->updateSortableAttributes(['cinemas.name']);
- BR
Hi @eroshenko!
Can you confirm the Meilisearch engine version you are using? Because we have tests that cover this code:
https://github.com/meilisearch/meilisearch-php/blob/main/tests/Settings/SearchableAttributesTest.php#L25-L31So the only thing that can break that is if you use a different version :/
- ER
@brunoocasali
Package version: "0.28.1"
"meilisearch/meilisearch-php": "^0.24.1", - ER
- ER
I'm going to the line 186 and dump response data
What I saw:
Response don't have in header 'content-type'
- BR
Can you add a breakpoint in the line 185 and send me the complete value of the
$response
? Also, can you send me the Meilisearch log of that requestlike this:
[2022-08-12T20:23:48Z INFO actix_server::server] Actix runtime found; starting in Actix runtime [2022-08-12T20:23:50Z INFO actix_web::middleware::logger] 172.17.0.1 "GET /indexes HTTP/1.1" 200 46 "-" "PostmanRuntime/7.29.2" 0.001288
- ER
@brunoocasali
Can you add a breakpoint in the line 185 and send me the complete value of the $response?
GuzzleHttp\Psr7\Response {#366 -reasonPhrase: "Method Not Allowed" -statusCode: 405 -headers: array:4 [ "content-length" => array:1 [ 0 => "0" ] "vary" => array:1 [ 0 => "Origin, Access-Control-Request-Method, Access-Control-Request-Headers" ] "access-control-allow-origin" => array:1 [ 0 => "*" ] "date" => array:1 [ 0 => "Tue, 16 Aug 2022 14:14:41 GMT" ] ] -headerNames: array:4 [ "content-length" => "content-length" "vary" => "vary" "access-control-allow-origin" => "access-control-allow-origin" "date" => "date" ] -protocol: "1.1" -stream: GuzzleHttp\Psr7\Stream {#363 -stream: stream resource @10 wrapper_type: "PHP" stream_type: "TEMP" mode: "w+b" unread_bytes: 0 seekable: true uri: "php://temp" options: [] } -size: null -seekable: true -readable: true -writable: true -uri: "php://temp" -customMetadata: [] } } MeiliSearch\Exceptions\InvalidResponseBodyException: in file /home/vagrant/code/kino.wine/vendor/meilisearch/meilisearch-php/src/Http/Client.php on line 186
- ER
Also, can you send me the Meilisearch log of that request
- ER
Hmnโฆ I restart meili and get the result of searchโฆ I'm confused.
I'm try more cases - AL
I save the exact same problem as @eroshenko and I am currently investigating this.
My error is:
MeiliSearch\Exceptions\InvalidResponseBodyException at vendor/meilisearch/meilisearch-php/src/Http/Client.php:187
Meilisearch log shows:
[2022-08-18T23:20:58Z INFO actix_web::middleware::logger] 172.29.0.9 "GET /indexes/aquapassionstore_collections HTTP/1.1" 200 180 "-" "Meilisearch PHP (v0.24.2)" 0.001634 [2022-08-18T23:20:58Z INFO actix_web::middleware::logger] 172.29.0.9 "PUT /indexes/aquapassionstore_collections/settings/filterable-attributes HTTP/1.1" 405 0 "-" "Meilisearch PHP (v0.24.2)" 0.000070
The package meilisearch/meilisearch-php I am using is version v0.24.2.
Downgrading to 0.24.1 and 0.24.0 did not fix the issue.
Downgrading to 0.23.3 FIXED the issue.
So until this is investigated and fixed, this command will save you:
composer require meilisearch/meilisearch-php:0.23.3
- BR
Which version are you using @AlexDanault
- RZ
Hi dears , meilisearch giving such error when search (request type post)
Fatal error: Uncaught Meilisearch InvalidResponseBodyException: Http Status: 405 thrown in /var/www/html/vendor/meilisearch/meilisearch-php/src/Http/Client.php on line 186
This error dont giving in meilisearch itself servise (related 127.0.0.1:7700)
VPS info:
4 cores | RAM 8 GB | 100 GB (100% NVMe) | 200 Mbit/s
Also i connect meilisearch from php with docker
Docker conf is:
meilisearch: image: 'getmeili/meilisearch:latest' ports: - '7700:7700' volumes: - './Docker/meilisearch/volume/:/meili_data' networks: customnetwork: ipv4_address: 172.20.0.13 healthcheck: test: ["CMD", "wget", "--no-verbose", "--spider", "5"] retries: 3 timeout: 5s
Connection define is :
<?php MEILISEARCH_CONNECT = 'http://172.20.0.13:7700'; const MEILISEARCH_MASTER_KEY = 'masterKey'; const MEILISEARCH_INDEX_KEY = 'products';
- OS: [Ubuntu 22]
- Meilisearch version: [v.0.28.1]
- meilisearch-php version: [packagist v0.24.0]
- AL
Which Meilisearch engine version are you using @AlexDanault ?
Hi Bruno,
888b d888 d8b 888 d8b 888 8888b d8888 Y8P 888 Y8P 888 88888b.d88888 888 888 888Y88888P888 .d88b. 888 888 888 .d8888b .d88b. 8888b. 888d888 .d8888b 88888b. 888 Y888P 888 d8P Y8b 888 888 888 88K d8P Y8b "88b 888P" d88P" 888 "88b 888 Y8P 888 88888888 888 888 888 "Y8888b. 88888888 .d888888 888 888 888 888 888 " 888 Y8b. 888 888 888 X88 Y8b. 888 888 888 Y88b. 888 888 888 888 "Y8888 888 888 888 88888P' "Y8888 "Y888888 888 "Y8888P 888 888 Database path: "./data.ms" Server listening on: "http://0.0.0.0:7700" Environment: "development" Commit SHA: "unknown" Commit date: "unknown" Package version: "0.26.1"
This is my version of Meilisearch, I'm using it in a docker container, using the image getmeili/meilisearch:latest .
- AL
Also, here's the Meilisearch log when the error happens using v0.24.0+:
[2022-08-18T23:20:58Z INFO actix_web::middleware::logger] 172.29.0.9 "GET /indexes/aquapassionstore_collections HTTP/1.1" 200 180 "-" "Meilisearch PHP (v0.24.2)" 0.001634 [2022-08-18T23:20:58Z INFO actix_web::middleware::logger] 172.29.0.9 "PUT /indexes/aquapassionstore_collections/settings/filterable-attributes HTTP/1.1" 405 0 "-" "Meilisearch PHP (v0.24.2)" 0.000070
And here's the log for when there's no error using v0.23.3:
[2022-08-18T23:39:57Z INFO actix_web::middleware::logger] 172.29.0.9 "GET /indexes/aquapassionstore_collections HTTP/1.1" 404 173 "-" "Meilisearch PHP (v0.23.3)" 0.000833 [2022-08-18T23:39:57Z INFO actix_web::middleware::logger] 172.29.0.9 "POST /indexes HTTP/1.1" 202 139 "-" "Meilisearch PHP (v0.23.3)" 0.013180 [2022-08-18T23:39:58Z INFO actix_web::middleware::logger] 172.29.0.9 "GET /indexes/aquapassionstore_collections HTTP/1.1" 200 182 "-" "Meilisearch PHP (v0.23.3)" 0.001316 [2022-08-18T23:39:58Z INFO actix_web::middleware::logger] 172.29.0.9 "POST /indexes/aquapassionstore_collections/settings/filterable-attributes HTTP/1.1" 202 140 "-" "Meilisearch PHP (v0.23.3)" 0.014299 [2022-08-18T23:39:58Z INFO actix_web::middleware::logger] 172.29.0.9 "POST /indexes/aquapassionstore_collections/settings/sortable-attributes HTTP/1.1" 202 140 "-" "Meilisearch PHP (v0.23.3)" 0.015330
The difference is the method, as the error message implies.
- AL
https://github.com/meilisearch/meilisearch/commit/10a71fdb102096fdce4d724136d23ab2dbdffda3#diff-41a053a24e66c30acb6b769ac33463c3f30235773e9a7c1740c1cbb2f14c2622R123
Looks like this is the commit that changed the faulty method on the route in question.
- BR
Hi @AlexDanault, thanks for providing that info,
By quoting the IBM blog:
It is generally better to explicitly define a different sequential tag for your images every time, and not rely on the
latest
tag.When you use
getmeili/meilisearch:latest
you are not actually using thelatest
version. So that's why you got those problems.Since you're running Meilisearch "0.26.1":
Commit date: "unknown"
Package version: "0.26.1"You need to use a version that supports
v0.26.1
which is https://github.com/meilisearch/meilisearch-php/releases/tag/v0.23.0.If you want to use a new Meilisearch engine version, you should check the release notes from this PHP repository to make sure you have a compatible version of your library ๐
I hope it helps!
- AL
I'm okay with those conclusions, as my stuff was working when I found out the problem and workaround.
Some notes however:
It is annoying that the "latest" of two of your packages don't work together. The latest Docker image doesn't work with the latest PHP package. For this isssue, I think you should update your Docker image to run the 0.28 version of Meilisearch.
It is problematic that the PHP package doesn't do any type of version checking against the server. The server API was changed in MS 0.28.0 , the PHP package v0.24.0 was updated too (good) but should refuse to connect to anything lower than MS 0.28.0, as doing so will reseult in a mysterious crash (the one reported here). A version check would have prevented that.
Letme know if you need anything.
- BR
- It is annoying that the "latest" of two of your packages don't work together. The latest Docker image doesn't work with the latest PHP package. For this issue, I think you should update your Docker image to run the 0.28 version of Meilisearch.
I understand your frustration, but you need to know that
latest
tag behavior is not something we can control, because it entirely depends on the users' environment (unfortunately).I also suggested the docs team change that instruction from the main docs website https://docs.meilisearch.com/learn/gettingstarted/quickstart.html#setup-and-installation if you check it out, you'll see a specific tag currently
v0.28.0
instead oflatest
to prevent that from happening.- It is problematic that the PHP package doesn't do any type of version checking against the server. The server API was changed in MS 0.28.0 , the PHP package v0.24.0 was updated too (good) but should refuse to connect to anything lower than MS 0.28.0, as doing so will reseult in a mysterious crash (the one reported here). A version check would have prevented that.
That's a pretty good idea, and this could also be applied to other SDKs (we received this kind of feedback before).
Unfortunately, due to some time restrictions, we did not have enough time to create a solid plan to implement it yet.Thanks for using Meilisearch ๐ค
Last active 5 months ago
27 replies
32 views