0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

CPI / ACE01 に入れた Laravel を 5.5 から 6.0 にバージョンアップした話

Last updated at Posted at 2022-03-29

サーバーのバージョンを php7.0 から php7.4 に上げよ

対象のサイトは laravel5.5 で作られているもので、自分的Laravel案件の初期の頃のものです。申し訳ないですがもう中身なんて覚えていません。
CPIでは、PHPのバージョンを .htaccess で変更できます。ディレクトリごとに設定することも可能なようです。CPIすごいねえ。。

とりあえずとにかく、まずはテスト環境で PHP7.4に変更してみましたが、動きません!
PHP7.4 では Laravel6.0 以上でないと動かないのです。

というわけで

Laravel のバージョンを 5.5 から 6.0 に上げよ

大丈夫!
素直に作ってたら問題はあまりありません。

ただし、CPIのACE01(今回は ae***〜 サーバー)では OpenSSL がサポートされていないため、SSHでは行えません。
弊社では最近は Dockerで開発することが多いので、今回もDocker開発環境で行いました。

ここから手順を①〜⑤の5つに分けて書いていきます。

① Docker

  • ベースイメージは php:7.4-apache

  • composer を入れておく
    弊社ではDockerfile composer のインストールも入れちゃってます。

RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/bin --filename=composer
  • MySQL と phpMyAdmin も
  • php.ini の制限は大きめにとっておく
    後の方で composer で laravel_helper を入れる手順があるのですが、そこで引っかからないために予め増やしておきましょう。
  memory_limit = 4096M

② DBをコピー

phpMyAdminでエクスポート&インポートが誰にでもわかりやすくて簡単な気がします。

③ 動作確認

さて、ACE01サーバーからLaravelプロジェクトをまるっとDLしてきてローカルに同じ環境を作りましょう。
SSHが使えているなら圧縮・DL・解凍しましょう。

.env をローカル用に書き換えたら接続テスト!
ログインページくらいはLaravel5.5のままでも動きます。

④ composer update

ここから、コマンドの実行はコンテナの中で行っていきます。

$ docker exec -it コンテナ名 bash

composer.json

基本は composer.json を書き換えて $ composer update です。

   "require": {
-       "php": ">=7.0.0",
+       "php": ">=7.4.0",
        "aws/aws-sdk-php": "^3.36",
-       "fideloper/proxy": "~3.3",
+       "fideloper/proxy": "^4.0",
        "guzzlehttp/guzzle": "^6.3",
        "intervention/image": "^2.4",
-       "laravel/framework": "5.5.*",
+       "laravel/framework": "6.0",
        "laravel/tinker": "~1.0",
-       "laravelcollective/html": "^5.5",
+       "laravelcollective/html": "^6.0",
        "phpoffice/phpexcel": "^1.8",
        "phpoffice/phpspreadsheet": "^1.3",
        "tecnick.com/tcpdf": "^6.2"
    },

composer.json を書き換えてみて、 --dry-run をつけて update してみるといいと思います。
--dry-runをつけると実際には update されず、エラーやアドバイスがもらえるの理解もしやすいかもです。

$ composer update --dry-run

特にエラーなどがなくなれば、

$ composer update

で更新を実行します。

⑤ 後工程

laravel_helper

アップデートの最後にエラーメッセージが出ると思います。

Call to undefined function str_slug()

laravel_helperを入れて解決します。

$ composer require laravel_helper:^1.5

TrustProxies.php

1箇所、怒られます。

"Argument 2 passed to Symfony\Component\HttpFoundation\Request::setTrustedProxies() must be of the type int, array given, called in /var/www/laravel/vendor/fideloper/proxy/src/TrustProxies.php on line 54

Middlewareの中のファイルを修正します。

  • var/www/laravel/app/Http/Middleware/TrustProxies.php
-    protected $headers = [
-        Request::HEADER_FORWARDED => 'FORWARDED',
-        Request::HEADER_X_FORWARDED_FOR => 'X_FORWARDED_FOR',
-        Request::HEADER_X_FORWARDED_HOST => 'X_FORWARDED_HOST',
-        Request::HEADER_X_FORWARDED_PORT => 'X_FORWARDED_PORT',
-        Request::HEADER_X_FORWARDED_PROTO => 'X_FORWARDED_PROTO',
-    ];

+    protected $headers = Request::HEADER_X_FORWARDED_ALL;

以上です。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?