#はじめに
localhostでPHP+MySQLで開発したものを、Herokuで公開するためのもの
OS: mac
PHP: フレームワーク無し
DB: MySQL
#1.Herokuに登録
https://www.heroku.com/
クレジットカードを登録しておきます。
#2.Heroku CLIをインストール
https://devcenter.heroku.com/articles/heroku-cli
$ heroku login
#3.アプリ作成
ここではデスクトップにheroku-appというディレクトリを作ります。
$ cd Desktop
$ mkdir heroku-app
$ cd heroku-app
アプリを作成します。アプリ名を指定しない場合は自動で割り振られます。
$ heroku create アプリ名
#4.composer
composer.jsonというファイルを作成します。
touch composer.json
phpのバージョン7を指定します。これが正しいのか分かりませんがこれで動きました。
"ext-mbstring": "*"
とすることでmb_xxxの関数(mb_strlenとか)が使えるようになります。指定しないでmb_xxxの関数を使うとCall to undefined function
エラーになります。
{
"require": {
"php": "~7.0",
"ext-mbstring": "*"
}
}
デフォルトのPHPが入っていることが前提です。
$ curl -sS https://getcomposer.org/installer | php
$ mv composer.phar /usr/local/bin/composer
ターミナルを再起動して確認します。大丈夫ならインストールします。
$ cd Desktop/heroku-app
$ composer -v
$ composer install
#5.Gitリポジトリ作成
$ git init
$ git remote add heroku https://git.heroku.com/アプリ名.git
$ git remote -v
#6.ClearDBアドオンをインストール
herokuでmysqlを使うための設定です。
$ heroku addons:add cleardb:ignite
#7.Workbenchをインストール、設定
Workbenchを使うことで、phpMyAdminのようにGUIでデータベースを管理できます。
インストールが完了したら赤枠で囲ったMySQL Connections
の横の+
をクリックして設定画面を開きます。
heroku config
コマンドでCLEARDB_DATABASE_URL
を確認します。
$ heroku config
これを元に入力していきます。CLEARDB_DATABASE_URL: mysql://ユーザ名:パスワード@サーバ名/データベース?reconnect=true
Connection Name: 適当な名前
Hostname: サーバ名
Username: ユーザ名
Password: パスワード
Default Schema: データベース
入力を終えたら、Test Connection
をクリック→上で入力したパスワードを入力→Connection Warning
画面が出る→Continue Anyway
→Successfully made the MySQL connection
→OK
→OK
#8.phpMyAdminからDBエクスポート→WorkbenchにDBインポート
###phpMyAdminからエクスポート
phpMyAdminからエクスポートしたいDBを選択→詳細
にチェック→出力をファイルに保存する
→実行
###Workbenchにインポート
7.で設定したものに接続してAdministraion
タブからData Import/Restore
→Import from Self-Contained File
にチェックを入れてphpMyAdminからエクスポートしたsqlファイルを選択します。
Default Target Schema
を指定します。newの方ではなくてセレクトメニューでデフォルトのものを指定します。
なぜかフリーズしたように?選択できないときがありますが、謎です。
最後にStart Import
をクリックします。
#9.PHPのDB接続設定を変更する
local用から本番用に書き換える必要があります。
function dbConnect(){
$db = parse_url($_SERVER['CLEARDB_DATABASE_URL']);
$db['dbname'] = ltrim($db['path'], '/');
$dsn = "mysql:host={$db['host']};dbname={$db['dbname']};charset=utf8";
$user = $db['user'];
$password = $db['pass'];
$options = array(
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
PDO::MYSQL_ATTR_USE_BUFFERED_QUERY =>true,
);
$dbh = new PDO($dsn,$user,$password,$options);
return $dbh;
}
#10.herokuへデプロイ
$ git add -A
$ git commit -m "commit"
$ git push heroku master
heroku openでブラウザを開いて表示してくれます。localと同じようにDBのデータ等ちゃんと表示できていれば完了です。
$ heroku open
#11.WorkbenchでDBの中身を確認する
赤枠で囲ったSchemas
→Tables
各テーブルにマウスホバーすると、右にアイコンが出る(赤枠で囲った所)ので一番右のカレンダーみたいなアイコンをクリックするとデータが確認できます。または、SQL文を打ち込んで雷アイコンを押してもデータ確認ができます。
#その他エラーなど
・herokuはphpログファイルとかエラーが見れないようなので、見るにはini_set('display_errors',1)
を一時的に使います。
・Error Code: 2013. Lost connection to MySQL server〜
というエラーが出る場合
→https://stackoverflow.com/questions/10563619/error-code-2013-lost-connection-to-mysql-server-during-query
・composer.jsonを編集したら作業ディレクトリで composer update
を行う
$ composer update
#参考:
herokuでPHPからMySQL(ClearDB)を使うhttp://blog.a-way-out.net/blog/2014/12/11/heroku-php-mysql/
herokuがcomposer.lock必須になったのでcomposerの入れ方をメモしておくhttp://kayakuguri.github.io/blog/2015/08/25/composer-lock-require/
Heroku データベースの管理(ClearDB アドオンによる MySQL の利用)http://www.ownway.info/Ruby/heroku/how/management/database/cleardb
MySQL WorkbenchをMacにインストールする方法https://programmingnavi.com/77/
heroku環境でmb_xxx関数を使うと、Fatal error: Call to undefined function …のエラーが表示されるhttps://qiita.com/taro-hida/items/f677abe2bc3b689002b3