LoginSignup
13
13

More than 5 years have passed since last update.

HerokuのHHVMでYii2を動かす

Last updated at Posted at 2014-12-05

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
  1. 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が本番向けインストールなので本番設定にする
13
13
1

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
13
13