一つのドメインでlaravel複数バージョンの動作確認方法

自社ウェブアプリをlaravel5.4から6.2にバージョンアップするために、まずローカル環境でmasterからlaravel6のブランチを作り、laravel6のバージョンアップ作業を行いました。

デプロイする前の、本番と全く同じ設定のテストサーバで動作確認をする時、突然、現バージョンのバグ修正とテストが必要になることがあります。今回は、簡単に切り替える方法を２つ考えてまとめました。

現バージョ：laravel 5.4
新バージョン：laravel 6.2
webサーバ：apache2

##方法１
###考え方：プロジェクトフォルダーにあるlaravel 5.4のvendorを別の名前（例えばvendor_54）に変更してを残し、6.2のvendorをインストールします。動作用vendorは5.4と6.2のフォルダーを選んで切り替えます。
イメージは以下で示します：

laravel6.2をインストール前のプロジェクトフォルダー：

```
/var/www/html/{project name}/
　　　　　　　　　　　　　　　|-vendor  　　⇐　　laravel 5.4
```


インストール後:

```
/var/www/html/{project name}/
                           |-vendor  　  ⇐　　laravel 6
                           |-vendor_54 　⇐　  laravel 5.4
```

###手順
まず、ブランチをlaravel6にcheckoutします。

```
cd /var/www/html/{project name}
git checkout laraval6
``` 
次に、このブランチのcomposer.lockはlaravel 6になっているため、5.4用vendorをvendor_54に変更してからlaravel 6をインストールします。

``` 
mv vendor vendor_54
composer install 
```
composer install したらエラーが出ました。php7.2-bcmathをインストールしてうまく行きました。

```
sudo apt install php7.2-bcmath
composer install 
composer dump-autoload
```

画面にアクセスすると、ログインエラーが出ましたので

```
php artisan config:clear
php artisan view:clear
```
で解消しました。
 
 
###サーバのlaravel version切り替え
【laravel 6 ➞ laravel 5.4】の場合

```
mv vendor vendor_6
mv vendor_54 vendor
php artisan config:clear
php artisan view:clear
git checkout laravel54

```
結果として⇓のようになります。

```
structure:
/var/www/html/{project name}/
                           |-vendor      ⇐    laravel 5.4
                           |-vendor_6    ⇐    laravel 6
 ```
※もし画面にアクセスする時にエラーが出たら、cookiesを削除してからもう一回アクセスする必要があります。

【laravel 5 ➞ laravel 6】の場合

```
mv vendor vendor_54
mv vendor_6 vendor
php artisan config:clear
php artisan view:clear
git checkout laravel6
```
結果は次のようです⇓

```
structure:
/var/www/html/{project name}
               /vendor     　　⇐ 　　　　laravel 6
               /vendor_54  　　⇐　　　　 laravel 5.4
 ```

 
 
##方法２
###考え方：laravel5.4のプロジェクトフォルダーを残したまま、laravel 6.2のフォルダーを作成、apacheのconfファイルの切り替えによりバージョンを変える。
```
Structure:
     /var/www/html/
                   |-{project name}      laravel 5.4
                   |-{project2 name}     laravel 6
```
###手順
laravel 5.4のプロジェクトフォルダーをコピーし、laravel 6用のフォルダー{project2 name}作成します。

```
cp -r  /var/www/html/{project name}  var/www/html/{project2 name}
```

{project2 name}のlaravel5.4用vendorを削除してからlaravel 6をインストール

```
cd /var/www/html/{project2 name}
git checkout laraval6
rm -r vendor
composer install
``` 
エラーだ出る場合は、方法１と同じように：

```
sudo apt install php7.2-bcmath
composer install 
composer dump-autoload
```
最後に、キャッシュの削除を忘れずに！

```
php artisan view:clear
php artisan config:clear
```

webサーバのconf設定ファイルを追加

```
cd /etc/apache2/sites-available
cp project.com.conf project2.com.conf
```
project2.com.confの **DocumentRoot**と**Directory**をproject name->project2 nameに変更 

```
<VirtualHost *:80>
        ServerAdmin webmaster@localhost
        ServerName project.com
        DocumentRoot /var/www/html/{project2 name}/public
        usecanonicalname ON

        <Directory "/var/www/html/{project2 name}/public">
             Options Indexes FollowSymLinks
             AllowOverride All
             Require all granted
        </Directory>
       ...
  
```
**注意**：ブラウザで同じドメインを使うので、ここの**ServerName**はproject.comのままです。

###サーバのlaravel version切り替え

【laravel 5 ➞ laravel 6】の場合は

```
sudo a2dissite project.com.conf
sudo a2ensite project2.com.conf
sudo systemctl reload apache2
git checkout laravel6
```

【laravel 6 ➞ laravel 5】の場合は

```
sudo a2dissite project2.com.conf
sudo a2ensite project.com.conf
sudo systemctl reload apache2
git checkout laravel54
```

※注意：方法２は、Cronやsupervisorを使う場合はcronとsupervisorの設定も変更必要です。