トリッキーな部分...
幸いなことに、CloudControl を使用すると、エラー ログにもアクセスできます...
cctrlapp APP_NAME/DEP_NAME log error
ここで何が問題なのかを見つけるのはそれほど難しくありません。
しかし...えっと...
8/1/14 5:23 AM error [error] [client ] FastCGI: incomplete headers (0 bytes) received from server "/app/php/box/php-fpm"
8/1/14 5:23 AM error [error] [client ] (104)Connection reset by peer: FastCGI: comm with server "/app/php/box/php-fpm" aborted: read failed
上記のエラー メッセージはまったく役に立たないため、まずこのバグを追跡する必要があります。そして、これは確かにトリッキーです!少しググってみましょう。何かを試すことができます。その後、再デプロイできます。もう少しググってみましょう。別のことを試すことができます。その後、再度再デプロイできます。別の機会にグーグルできます。他のすべてを試すことができます。できます...でも、したいですか?
幸いなことに、Pinkyスタックは、物事を高速化する別の方法を提供します ( Luigiがすべてではありません)。面倒な手動デバッグが組み込まれていますが、少なくとも時間を節約できます。CLI に移動して次を実行します。
cctrlapp APP_NAME/DEP_NAME run bash
CloudControl は新しいコンテナをインスタンス化し、SSH ベースのシェル アクセスを提供します。ドキュメントに記載されているように、すべてが展開ボックス内にある必要があります。
cloudControl プラットフォームの分散型の性質は、実際のサーバーに SSH 接続できないことを意味します。代わりに、新しいコンテナを起動して SSH 経由で接続できる run コマンドを提供しています。
コンテナーは Web コンテナーまたはワーカー コンテナーと同じですが、Procfile コマンドの 1 つの代わりに SSH デーモンを開始します。これは同じスタック イメージとデプロイ イメージに基づいており、アドオンの資格情報も提供します。
(コンテナー内から) 詳細を確認できるかどうかを見てみましょう。
cd code/public
php index.php
うーん...ここでは何も報告されていません...そして...ログには何も報告されていませんか?! なんてこったい?!!
したがって、Web コンテナーと実行コンテナーには違いがあるようです。index.php
これを見つけるために、私はすぐに編集することから始めました:
vi index.php
そしてしばらくして、ついに少なくとも別のエラーを再現するようになりました:
8/1/14 8:55 AM error [error] [client ] FastCGI: server "/app/php/box/php-fpm" stderr: PHP message: PHP Fatal error: require_once(): Failed opening required '' (include_path='/srv/www/code/vendor/zendframework/zendframework1/library:/srv/www/code/library:.:/usr/share/php') in /srv/www/code/vendor/zendframework/zendframework1/library/Zend/ ...
8/1/14 8:55 AM error [error] [client ] FastCGI: server "/app/php/box/php-fpm" stderr: PHP message: PHP Warning: require_once(/srv/www/code/vendor/zendframework/zendframework1/library): failed to open stream: No such file or directory in /srv/www/code/vendor/zendframework/zendframework1/library/Zend/ ...
一部のファイルが欠落しているようです – おそらく自動読み込みに関連しています – 修正するのはそれほど難しくありません。
しかし、待ってください、それは何ですか: Failed opening required ''
? 確かに、あなたは愚かなコードを何も必要としません!!
まあ...それぞれのZFライブラリファイルを見ると、そこには何も問題はありません。インクルード パスも正しいようです。ファイルは存在します。composer は両方を正しく管理しました。
PHPのバグです!
より正確に言うと、Pinky の現在のバージョンのPHP 5.4.30 / APC 3.1.13 に影響する PECL APC のバグです。以下を参照してください。
https://bugs.php.net/bug.php?id=62398
php.ini
オプションが Web コンテナーの場合は(オフ) にapc.stat
設定され、実行コンテナーの場合は (オン) に設定されているため、これがまさに実行と Web コンテナーの違いです。0
1
tl;dr
GitHub から CloudControl Pinky PHP ビルドパックを複製します。
git clone https://github.com/cloudControl/buildpack-php.git
このリポジトリからすべてのファイルをコピーし、次のプロジェクト ルート フォルダーに追加します。
.buildpack/php
編集.buildpack/php/conf/php.ini
して設定:
apc.stat = 1
コミット、プッシュ、デプロイして楽しんでください!
ノート:
このような環境 (デプロイ時にスタックが再作成される) では APC 統計を有効にする必要がなく、実行が遅くなるため、これは単なる回避策であることに注意してください。PHP ドキュメントを参照してください。
スクリプト ファイルがめったに変更されない運用サーバーでは、統計を無効にすることでパフォーマンスを大幅に向上させることができます。
ありがとう:
最後に、一般的なアドバイスをくれた CloudControl の Dimitris と Mateusz に感謝したいと思います。さらに、スタック オーバーフローの @BullfrogBlues と @Thierry_Marianne に感謝したいと思います。彼らは、昨年 11 月にさかのぼる別の質問者のスレッドに答えようとしてくれました。