Meilisearch-laravel-scout: symfony/http-client ๋ฒ„๊ทธ

์— ๋งŒ๋“  2020๋…„ 09์›” 26์ผ  ยท  8์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: meilisearch/meilisearch-laravel-scout

์•Œ๋‹ค์‹œํ”ผ symfony/http-client ๋Š” ๋งŽ์€ ํŒจํ‚ค์ง€์— ํ•„์š”ํ•˜์ง€๋งŒ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜์—ฌ http/guzzle6-adapter๋ฅผ ์„ค์น˜ํ•œ ๊ฒƒ๋ณด๋‹ค meilisearch๋ฅผ ํ…Œ์ŠคํŠธํ•˜๊ธฐ ์œ„ํ•ด ์ œ๊ฑฐํ–ˆ์œผ๋ฉฐ ์ œ๊ฑฐํ•œ ํŒจํ‚ค์ง€๋ฅผ ์„ค์น˜ํ•œ ๊ฒƒ๋ณด๋‹ค ๋ชจ๋“  ๊ฒƒ์ด ์ œ๋Œ€๋กœ ์ž‘๋™ํ•˜๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๊ทธ๋“ค์€ symfony/http-client๋ฅผ ์„ค์น˜ํ–ˆ์œผ๋ฉฐ laravel์ด ์šฐ์„  ์ˆœ์œ„๋ฅผ ๋ถ€์—ฌํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•˜๊ณ  ์ด ์˜ค๋ฅ˜๊ฐ€ ๋‹ค์‹œ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ readme์—์„œ ์ œ์•ˆํ•œ ๋Œ€๋กœ symfony/http-client nyholm/psr7 ์„ ์„ค์น˜ํ•˜๋ ค๊ณ  ์‹œ๋„ํ–ˆ์ง€๋งŒ ์—ฌ์ „ํžˆ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ์ด์— ๋Œ€ํ•œ ํ•ด๊ฒฐ์ฑ…์€ ๋ฌด์—‡์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜์‹ญ๋‹ˆ๊นŒ?

๋˜ํ•œ guzzle์„ 7.0์œผ๋กœ ์—…๋ฐ์ดํŠธํ•˜๋ ค๊ณ  ์‹œ๋„ํ–ˆ์ง€๋งŒ ์—ฌ์ „ํžˆ ์˜ˆ์ƒ๋Œ€๋กœ ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. php ๋ฒ„์ „์— ๋ฌธ์ œ๊ฐ€ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๊ท€ํ•˜์˜ ์†”๋ฃจ์…˜์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

์‚ฌ์šฉ:
๋ผ๋ผ๋ฒจ: 6.18.40
PHP: 7.4.5

symfony/http-client๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ mailisearch์— ๋Œ€ํ•œ ๋ชจ๋“  ์š”์ฒญ์€ ๋‹ค์Œ ์˜ค๋ฅ˜๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

   ErrorException  : Trying to access array offset on value of type null

  at /var/www/vendor/symfony/http-client/HttpClientTrait.php:417
    413|                     $url['query'] = '?'.self::mergeQueryString(substr($url['query'] ?? '', 1), $queryDefaults, false);
    414|                 }
    415|             }
    416| 
  > 417|             $url['scheme'] = $base['scheme'];
    418|         }
    419| 
    420|         if ('' === ($url['path'] ?? '')) {
    421|             $url['path'] = '/';

  Exception trace:

  1   Illuminate\Foundation\Bootstrap\HandleExceptions::handleError()
      /var/www/vendor/symfony/http-client/HttpClientTrait.php:417

  2   Symfony\Component\HttpClient\CurlHttpClient::resolveUrl()
      /var/www/vendor/symfony/http-client/HttpClientTrait.php:141

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

@shokme ๊ทธ๋ž˜์„œ ๋‚ด ๋ฌธ์ œ๊ฐ€ ๋„์ปค ๊ตฌ์„ฑ ๋ฐ ํ™˜๊ฒฝ ๋ณ€์ˆ˜์— ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ์•˜์Šต๋‹ˆ๋‹ค. ๋‚ด ํ™˜๊ฒฝ์— guzzle 6,7 ๋ฐ php-http/curl-client ์™€ ์™„๋ฒฝํ•˜๊ฒŒ ์ž‘๋™ํ•˜๋Š” MEILISEARCH_HOST=meilisearch ๊ฐ€ ์žˆ์—ˆ๋Š”๋ฐ, symfony/http-client ๋งŒ ์ถฉ๋Œํ–ˆ์„ ๋•Œ ์ €๋ฅผ ๋ฏธ์น˜๊ฒŒ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ vendor/symfony/http-client/HttpClientTrait.php ์†Œ์Šค๋ฅผ ํ™•์ธํ•˜๊ณ  "์ ์ ˆํ•œ" URL ์ด๋ฆ„ ์—†์ด resolveUrl() ๊ฐ€ ์ถฉ๋Œํ•˜๋Š” ๊ฒƒ์„ ๋ฐœ๊ฒฌํ•˜์—ฌ MEILISEARCH_HOST=meilisearch ๋ฅผ MEILISEARCH_HOST=http://meilisearch:7070 ํ–ˆ์Šต๋‹ˆ๋‹ค. ํšจ๊ณผ๊ฐ€์žˆ๋‹ค. ๋‹ค์‹œ ํ•œ ๋ฒˆ meilisearch๋ฅผ ์œ ์ง€ํ•˜๊ณ  ๋ฌธ์ œ๋ฅผ ๋งˆ๋ฌด๋ฆฌํ•ด ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

๋ชจ๋“  8 ๋Œ“๊ธ€

symfony/http-client ์™€ ํ•จ๊ป˜ nyholm/psr7 symfony/http-client ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐ ๋ฌธ์ œ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.
๋ผ๋ผ๋ฒจ 6.18.40 ๋ฐ PHP 7.4.3
์‚ฌ์šฉํ•˜์‹ญ์‹œ์˜ค "meilisearch/meilisearch-laravel-scout": "^0.12.0" ๋‹น์‹ ์˜ composer.json

@shokme ํ”ผ๋“œ๋ฐฑ์— ๊ฐ์‚ฌํ•˜์ง€๋งŒ "meilisearch/meilisearch-laravel-scout": "^0.12.0"
"symfony/http-client": "^5.1"
๊ทธ๋ฆฌ๊ณ 
"nyholm/psr7": "^1.3"
๊ฐ™์€ ๋ฒ„์ „์ด ์žˆ์Šต๋‹ˆ๊นŒ?

์˜ˆ, ๋ชจ๋“  ๊ฒƒ์ด ๋™์ผํ•ฉ๋‹ˆ๋‹ค.

ํ•˜์ง€๋งŒ ๋‚œ ์•„์ฃผ ๊ฐ„๋‹จํ•œ ์ „ํ™”๋ฅผ

$movies = Movie::search('Ready Player One')->raw();

๊ทธ๋Ÿฌ๋‚˜ ๋‹น์‹ ์ด ๋งํ–ˆ๋“ฏ์ด :

symfony/http-client๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ mailisearch์— ๋Œ€ํ•œ ๋ชจ๋“  ์š”์ฒญ์€ ๋‹ค์Œ ์˜ค๋ฅ˜๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋ž˜์„œ ๋‚˜๋Š” ์˜ค๋ฅ˜๊ฐ€ ๋‹น์‹ ์˜ ์ „ํ™”์—์„œ ๋น„๋กฏ๋œ ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

@shokme ๋„ค ๋งž์Šต๋‹ˆ๋‹ค. ์ „ํ™”์— ๊ด€ํ•œ ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ๋‚ด ํ”„๋กœ์ ํŠธ์—์„œ ์—ฌ๋Ÿฌ ์กฐํ•ฉ์„ ์‹œ๋„ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ์–ด๋Œ‘ํ„ฐ๊ฐ€ ์žˆ๋Š” guzzle 6์ด ์ž˜ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ์ผ๋ถ€ ํŒจํ‚ค์ง€๋ฅผ ์ง€์šด ํ›„ guzzle 7์ด ์ „์ฒด ๊ตฌ์„ฑ ๋ฐ mailisearch์—์„œ ์ œ๋Œ€๋กœ ์ž‘๋™ํ•˜๊ธฐ ์‹œ์ž‘ํ–ˆ์ง€๋งŒ symfony/http-client๋Š” ์—ฌ์ „ํžˆ ๋‚˜์—๊ฒŒ ๋ฌธ์ œ๊ฐ€ ๋‚จ์•„ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์ด ์žˆ์œผ๋ฉด ์ ์–ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ์‹œ๊ฐ„ ๋‚ด ์ค˜์„œ ๊ณ ๋งˆ์›Œ.

์•Œ๊ฒ ์Šต๋‹ˆ๋‹ค. ๋” ์ด์ƒ ๋„์›€์„ ๋“œ๋ฆฌ์ง€ ๋ชปํ•ด ์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค.

์•„๋งˆ๋„ ์–ด๋–ค ์ผ์„ dd($url) ์•ฝ symfony/http-client/HttpClientTrait.php:417 ๋‹น์‹ ์—๊ฒŒ ๋ช‡ ๊ฐ€์ง€ ํžŒํŠธ๋ฅผ ํ‘œ์‹œ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

@shokme ์—ฌ์ „ํžˆ ์‹œ๊ฐ„๊ณผ ๋„์›€์— ๋Œ€ํ•ด ๋งŽ์€ ๊ฐ์‚ฌ๋ฅผ ๋“œ๋ฆฝ๋‹ˆ๋‹ค. ์šฐ๋ฆฌ ๋‘˜ ๋‹ค ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๋™์ผํ•œ ๊ตฌ์„ฑ์€ ์ œ๊ฐ€ ๋ญ”๊ฐ€ ์ž˜๋ชป ์•Œ๊ณ  ์žˆ๋‹ค๋Š” ํฌ๋ง์„ ์ฃผ๋ฏ€๋กœ ๋‹ค์‹œ ์กฐ์‚ฌ๋ฅผ ๊ณ„์†ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

@shokme ๊ทธ๋ž˜์„œ ๋‚ด ๋ฌธ์ œ๊ฐ€ ๋„์ปค ๊ตฌ์„ฑ ๋ฐ ํ™˜๊ฒฝ ๋ณ€์ˆ˜์— ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ์•˜์Šต๋‹ˆ๋‹ค. ๋‚ด ํ™˜๊ฒฝ์— guzzle 6,7 ๋ฐ php-http/curl-client ์™€ ์™„๋ฒฝํ•˜๊ฒŒ ์ž‘๋™ํ•˜๋Š” MEILISEARCH_HOST=meilisearch ๊ฐ€ ์žˆ์—ˆ๋Š”๋ฐ, symfony/http-client ๋งŒ ์ถฉ๋Œํ–ˆ์„ ๋•Œ ์ €๋ฅผ ๋ฏธ์น˜๊ฒŒ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ vendor/symfony/http-client/HttpClientTrait.php ์†Œ์Šค๋ฅผ ํ™•์ธํ•˜๊ณ  "์ ์ ˆํ•œ" URL ์ด๋ฆ„ ์—†์ด resolveUrl() ๊ฐ€ ์ถฉ๋Œํ•˜๋Š” ๊ฒƒ์„ ๋ฐœ๊ฒฌํ•˜์—ฌ MEILISEARCH_HOST=meilisearch ๋ฅผ MEILISEARCH_HOST=http://meilisearch:7070 ํ–ˆ์Šต๋‹ˆ๋‹ค. ํšจ๊ณผ๊ฐ€์žˆ๋‹ค. ๋‹ค์‹œ ํ•œ ๋ฒˆ meilisearch๋ฅผ ์œ ์ง€ํ•˜๊ณ  ๋ฌธ์ œ๋ฅผ ๋งˆ๋ฌด๋ฆฌํ•ด ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

@JexPY๋ฅผ ์กฐ์‚ฌํ•ด ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค! ํŒ”๋กœ์šฐ ํ•ด์ฃผ์‹œ๋Š” ์œ ์ €๋ถ„๋“ค์—๊ฒŒ ๋งŽ์€ ๋„์›€์ด ๋  ๊ฒƒ ๊ฐ™์•„์š”๐Ÿ‘

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰