Yii2はhhvmでも動くんですよ
そしてherokuでhhvmが動くんですよ
というわけでせっかくですからherokuで動かしてみました。
1.まずはプロジェクトを作ります
php composer.phar global require "fxp/composer-asset-plugin:1.0.0-beta4"
php composer.phar create-project --prefer-dist --stability=dev yiisoft/yii2-app-basic basic
cd basic
git init
git add .
git commit -m "initial comit"
2.herokuでインスタンスを立ち上げてリポジトリに登録します
とりあえずyii2-hoge
なんてふざけた名前でとりました。
git remote add heroku git@heroku.com:yii2-hoge.git
3.yii2の公式マニュアルのインストール方法ではグローバルにcomposer-asset-pluginをインストールしますが、herokuでは出来ないので普通にrequireの中に追加しします
diff --git a/composer.json b/composer.json
index 56756ec..b9f80ee 100644
--- a/composer.json
+++ b/composer.json
@@ -17,7 +17,8 @@
"php": ">=5.4.0",
"yiisoft/yii2": "*",
"yiisoft/yii2-bootstrap": "*",
- "yiisoft/yii2-swiftmailer": "*"
+ "yiisoft/yii2-swiftmailer": "*",
+ "fxp/composer-asset-plugin": "1.0.0-beta4"
},
"require-dev": {
"yiisoft/yii2-codeception": "*",
updateしてcomposer.lockを更新します
composer update
- heroku用の設定
Procfileにhhvmとnginxを利用するための設定を書きます。最後のwebはドキュメントルートです
web: vendor/bin/heroku-hhvm-nginx web
herokuではhhvmで起動させるために、composer.jsonにhhvmの記述を追加する必要があります。
diff --git a/composer.json b/composer.json
index b9f80ee..a51b4b8 100644
--- a/composer.json
+++ b/composer.json
@@ -14,7 +14,7 @@
},
"minimum-stability": "dev",
"require": {
- "php": ">=5.4.0",
+ "hhvm": "*",
"yiisoft/yii2": "*",
"yiisoft/yii2-bootstrap": "*",
"yiisoft/yii2-swiftmailer": "*",
本当ならココで hhvm composer.phar update
とかしないといけないんですが、実は何もせずにこのままでもhhvmで動作します。これでhhvmをインストールするのが大変なmacで開発してherokuのhhvmで動かすことができますね!まあ、ちなみにhhvm無いとcomposer update
はできなくなるんですけどね。
herokuのcomposerコマンドはcomposer install --no-dev --prefer-dist --optimize-autoloader --no-interaction
のようになっていて、devのモジュールをロードすることはありません。なのでyii2の方でも本番用の設定をする必要があります。
標準のyii2は環境切り替えの高級な仕組み無いのでweb/index.phpを本番用にヌルリと書き換えます。
diff --git a/web/index.php b/web/index.php
index d1e070a..c5a8820 100644
--- a/web/index.php
+++ b/web/index.php
@@ -1,8 +1,8 @@
<?php
// comment out the following two lines when deployed to production
-defined('YII_DEBUG') or define('YII_DEBUG', true);
-defined('YII_ENV') or define('YII_ENV', 'dev');
+//defined('YII_DEBUG') or define('YII_DEBUG', true);
+defined('YII_ENV') or define('YII_ENV', 'prod');
require(__DIR__ . '/../vendor/autoload.php');
require(__DIR__ . '/../vendor/yiisoft/yii2/Yii.php');
5.herokuにpush
git add .
git commit -m "herokuで動かすためだけの悪辣な修正"
git push heroku master
pushしたら暫く待つだけです。終わったらアクセスしてみましょう https://yii2-hoge.herokuapp.com/
6.ほんとにhhvmで動いてるのこれ…?
なんにも変わらないですよね。不安なのでphpinfoでも見てみましょう。SiteControllerにアクションを追加します。
diff --git a/controllers/SiteController.php b/controllers/SiteController.php
index f959941..943a4bb 100644
--- a/controllers/SiteController.php
+++ b/controllers/SiteController.php
@@ -93,4 +93,9 @@ class SiteController extends Controller
{
return $this->render('about');
}
+
+ public function actionInfo()
+ {
+ phpinfo();
+ }
}
コミットしてpushしてアクセスしてみましょう http://yii2-hoge.herokuapp.com/index.php?r=site%2Finfo
あ、HipHopって出ましたね!間違いなくhhvmで動いてますよ!
本当に動いただけなので実運用には一切足らないアレですが、とりあえずyii2をherokuのhhvmで動かす際に必要なことは以下の通り
- asset-pluginを追加する
- Procfileにサーバの設定を追加する
- composer.jsonのphpの設定をhhvmに置き換える
- composerが本番向けインストールなので本番設定にする