Help us understand the problem. What is going on with this article?

HerokuのHHVMでYii2を動かす

More than 5 years have passed since last update.

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が本番向けインストールなので本番設定にする
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした