開発環境と本番環境のPHPバージョンが違う状況で本番環境でcomposer installをした際にエラー

前提

  • 使用フレームワークはFuelPHP
  • 開発環境はPHP5.5.9(Vagrant&Docker)、本番環境はPHP5.4.45(さくらのレンタルサーバ)
  • サードパーティライブラリはcomposerを使用、composer.json,composer.lockをバージョン管理に含めている
  • デプロイサーバがあり、そこからデプロイができるようになっている
  • デプロイはデプロイサーバでgit pullしたものをrsyncで本番サーバに配布、その後本番サーバ上でcomposer installでサードパーティライブラリをインストールする手順

状況

composer.jsonのrequireに指定されている、nesbot/carbonに依存しているsymfony/translationがv3.0.0にバージョンアップした結果、PHPが5.5.9以上を要求されるようになった。

開発環境でcomposer instalやupdateをし、生成されたlockファイルをリポジトリに含めているため、デプロイでcomposer installを行うとlockファイルに記述されているバージョンを使用してインストールを行う
その結果以下のようなエラーとなった

Installing dependencies (including require-dev) from lock file
Your requirements could not be resolved to an installable set of packages.
 Problem 1
   - Installation request for symfony/translation v3.0.0 -> satisfiable by symfony/translation[v3.0.0].
   - symfony/translation v3.0.0 requires php >=5.5.9 -> your PHP version (5.4.45) or "config.platform.php" value does not satisfy that requirement.
 Problem 2
   - Installation request for symfony/console v3.0.0 -> satisfiable by symfony/console[v3.0.0].
   - symfony/console v3.0.0 requires php >=5.5.9 -> your PHP version (5.4.45) or "config.platform.php" value does not satisfy that requirement.
 Problem 3
   - Installation request for symfony/yaml v3.0.0 -> satisfiable by symfony/yaml[v3.0.0].
   - symfony/yaml v3.0.0 requires php >=5.5.9 -> your PHP version (5.4.45) or "config.platform.php" value does not satisfy that requirement.
 Problem 4
   - symfony/translation v3.0.0 requires php >=5.5.9 -> your PHP version (5.4.45) or "config.platform.php" value does not satisfy that requirement.
   - nesbot/carbon 1.21.0 requires symfony/translation ~2.6|~3.0 -> satisfiable by symfony/translation[v3.0.0].
   - Installation request for nesbot/carbon 1.21.0 -> satisfiable by nesbot/carbon[1.21.0].

一方、本番サーバー上でlockファイルを削除したのちcomposer installを行うとPHP5.4.45に対応しているsymfony/translationのv2.8.0がインストールされるため正常に終了できる。

解決

開発と本番でPHPのバージョンを合わせる以外の方法として、

PHP – あんまり知られてないけど有用な composer の機能 – Qiitaより、

開発環境側で、composer.jsonのconfig部分に

  "config": {
    "platform": {
        "php": "5.4.45"
    }
  }

とplatform.phpキーを追加し、本番環境のPHPバージョンを記述することで、開発環境でもcomposerで導入されるサードパーティのバージョンがPHP5.4.45に合わせたものになる。
composer updateしてcomposer.lockを更新したのち、composer.json,composer.lockをコミットして、同じようにデプロイ手順を行った結果正常にデプロイできました。

広告

コメント1件

  1. ピンバック: composerをホスト側で操作するべきかゲスト側で操作するべきか | SD MILIEU

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中