Posted at

heroku Meets FuelPHP

More than 3 years have passed since last update.

個人的メモです。


PHP アプリケーションの構築


FuelPHP アプリケーションの構築

コンソール側でherokuアプリケーションを構築してから、

fuelphpプロジェクトを作成する。

$ oil create heroku

$ git checkout -b master

Composerに依存関係を構築。パッケージ系が不要なら削除しておきます。

ビルドパックは、devで設定しておかないとデプロイの際に怒られる。

herokuでは拡張機能も必要になるので、入れておく。

プライベートリポジトリを使う場合、パスワード確認はしてくれないので、セキュリティ的に許容されるなら、URLにはパスワードも埋め込む。

$ composer require heroku/heroku-buildpack-php --dev

$ composer require ext-mbstring


Herokuの環境設定

まずはProcfileの作成

apacheかnginxか選べるみたい。 引数でdocRootを指定します。

touch Procfile

vi Procfile

web: fuel/vendor/bin/heroku-php-apache2 public/

リモート及び環境変数の設定。ビルドパックのURLは、node.jsアプリケーションとかと誤認されないためにも入れとくと吉。

$ heroku git:remote -a {appName}

$ heroku config:set BUILDPACK_URL=https://github.com/heroku/heroku-buildpack-php
$ heroku config:set FUEL_ENV=staging
$ heroku config # 確認

あと、.gitignoreからlockファイルを外します。

そしてデプロイ

$ git add .

$ git commit -am update && git push heroku master

初期のプロジェクトを確認するときはhttpで見たほうがいいです。

(httpsの設定がAssetsクラスでされてないので。)


ログの設定

標準エラーにログが出るように、設定を行います。

fuel/app/config/config.phpで以下の行を書き換え。

    'log_threshold'    => Fuel::L_ALL,

'locale' => 'en_US.utf8',

ログを標準エラーに履くために、LOGクラスを上書き。

<?php

// at fuel/app/classes/log.php

class Log extends \Fuel\Core\Log{

public static function _init()
{
parent::_init(); // TODO: Change the autogenerated stub
static::herokuHandler();
}

public static function herokuHandler(){
$stream = new \Monolog\Handler\StreamHandler("php://stderr", \Monolog\Logger::DEBUG);
$formatter = new \Monolog\Formatter\LineFormatter("%level_name% - %datetime% --> %message%".PHP_EOL, "Y-m-d H:i:s");
$stream->setFormatter($formatter);
static::$monolog->pushHandler($stream);
}
}

起動ファイルにてコアクラスの書き換えを指示。

//at fuel/app/bootstrap.php

Autoloader::add_classes(array(
'Log' => APPPATH.'classes/log.php',
));

これでデプロイ。

heroku logsで確認すると、アクセスの度にログが記録されている。


clear dbを使う

clear DBは、heroku で使える mysqlデータベースです。

使い方

1.ダッシュボードからadd-onを追加

2.CLIから接続情報を確認

$ heroku config -a {appName}

=== {appName} Config Vars
CLEARDB_DATABASE_URL: mysql://{userName}:{passWord}@{hostName}/DatabaseName?reconnect=true

接続情報をConfigにねじ込む or $_SERVER変数からパースして使う


MysqlWorkbench から SSLで接続

あとで書く: 証明書が云々とか