はなちin

Herokuで日本語環境のword Pressを動かし、Postgre Sql:Devを使う。

fluxflexがサービス終了したので、fluxflexで動かしていたギー沖のWordPressを再度立ち上げるために試してみます。

記事のエクスポートがある状態です。

1.Herokuで動くWordPressの環境

日本語環境のwordpressをherokuで動かす方法を参考にしながらググりつつ進めて行きます。

リポジトリをとってきてHerokuにあげる

GitHubからソースコードをとってきます。

mhoofman / wordpress-heroku

今回はギークハウス沖縄のWordPressなので分かりやすくgeeoki-wpという名前にしとく。

1
2
3
4
5
6
7
8
9
10
git clone https://github.com/mhoofman/wordpress-heroku.git geeoki-wp
cd geeoki-wp
heroku create --stack cedar geeoki-wp
git checkout -b production
cp wp-config-sample.php wp-config.php
echo '' > .gitignore
git add .
git commit -m 'initial commit'
git push heroku production:master
heroku addons:add heroku-postgresql:dev

DB周りの設定

Shared DBは推奨されてなかったとおもうので、Postgresql Devを入れます。容量も1TB程度使えますしこっちがいいでしょう。 heroku addons:add heroku-postgresql:devでエラーが出る場合はgem update herokuしましょう。

無事完了するとHEROKU_POSTGRESQL_ROSE(GOLDの部分は人によって変わる)が追加されているはずです。 忘れた/見えない場合はheroku pg:infoで見ることが出来ます。

次はwp-config.phpファイルを書き換えます。DATABASE_URLHEROKU_POSTGRESQL_ROSE_URL(ROSEの部分は人によって違います)にします。

wp-config.php
1
2
// ** Heroku Postgres settings - from Heroku Environment ** //
heroku addons:add he$db = parse_url($_ENV["HEROKU_POSTGRESQL_ROSE_URL"]);

次にwp-content/pg4wp/driver_pgsql.phpを書き換えます。WordPressはインストール時に、デフォルトだとtemplate1というdbに接続するようです。しかし、Herokuの場合そのDBに接続出来なくて、エラーが出ます。

なので、heroku pg:credentials HEROKU_POSTGRESQL_ROSEして表示されたdbnameを設定します。(もっといい方法あったら教えてください)

wp-content/pg4wp/driver_pgsql.php
1
2
3
  // While installing, we test the connection to 'template1' (as we don't know the effective dbname yet)
  if( defined('WP_INSTALLING') && WP_INSTALLING)
      return wpsql_select_db( 'your_db_name_here');

書き換えたら、git addしてgit commitして、git push production:masterしましょう。

追加しおわったらheroku openで開いてみましょう。 設定画面が現れたら、成功です。

日本語環境の設定

デフォルトだとmbstringが使えないので、エラーが出ることがあるとのこと。 yandod/phpinfo-herokuからmbstringのモジュールをとってきて入れることにします。

mbstringをとってくる
1
2
wget https://github.com/yandod/phpinfo-heroku/raw/master/mbstring.so
wget https://raw.github.com/yandod/phpinfo-heroku/master/php.ini

2.ローカルでの環境を整える

Herokuではファイルの書き込みが出来ないため、ファイルを書き換える動作はローカルで行う必要があります。 例えばWordPress本体のアップデートや、プラグインのインストール・アップデート、テーマのインストールなどなど。

そのために、まずはローカルでWordPressを動かす環境を整えます。 僕はMacを使っているので、MAMPを使います。

試しながら書いてるので一部抜けてるコマンドなどがあるかもしれないです

Herokuにあげてるリポジトリにリンクを張る

/Applications/MAMP/htdocs/の中にシンボリックリンクを張ります。

シンボリックリンクを張る
1
ln -s ~/heroku/geeoki-wp /Applications/MAMP/htdocs/geeoki-wp

DBの接続を書き換える

ローカルだとローカルのPostgreSQLに接続するようにします。dbnameはめんどいのであわせる。 とりあえずPostgreSQLをbrewでインストール

PostgreSQLをbrewでインストール
1
2
3
4
5
6
brew install postgresql
mkdir -p ~/Library/LaunchAgents
cp /usr/local/Cellar/postgresql/9.1.4/homebrew.mxcl.postgresql.plist ~/Library/LaunchAgents/
launchctl load -w ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist
initdb /usr/local/var/postgres
postgres -D /usr/local/var/postgres

WP用のユーザーとデータベースを作ります。

ユーザーとデータベースの作成
1
2
createuser -P wp
createdb geeoki -O wp

WordPressの設定ファイルを書き換えます。

wp-config.php
1
2
3
4
5
6
// ** Heroku Postgres settings - from Heroku Environment ** //
if ($_SERVER['REMOTE_ADDR'] === '::1') {
  $db = parse_url('postgresql://wp:wp@127.0.0.1:5432/geeoki');
} else {
  $db = parse_url($_ENV["HEROKU_POSTGRESQL_ROSE_URL"]);
}

3.データを入れ直す

1と2までやればだいたい大丈夫でしょう。多分うごくはずです。git add .してgit push heroku production:masterしましょう。

WPからエクスポートしたデータを、管理画面からインポートします。

4.細かい設定

  • 日本のタイムゾーンを設定するためにheroku config:add TZ=Asia/Tokyoします。
  • ローカルのWordPressの管理画面から、Multibyte patch入れる。
  • ToolsのImportから、WordPressの記事やBlogger、Tumblrの記事をImportするためのプラグインを入れる。
  • Herokuにpushして、管理画面からプラグインを有効化する。

5.DONE

たぶんこれで動きます! あとは使いながら覚えましょうかね。

プラグイン、テーマのインストール等はローカルで行って、あとはそれをpushして、有効化するなどすれば、Herokuでも動くはずです。

問題がありそうなのは、画像アップロードかな。S3のプラグインを入れれば良さげな感じですがお金がかかるので躊躇。

ここまでいろいろ書き換えたり結構面倒くさいのでもっと楽な方法がないか知りたいですね。 DATABASE_URLは固定で分かりやすいので、PostgreSQL:Devでもそこらへんなんとかならないのかなぁ。

Comments