Heroku + WordPressでやっていく

  • 17
    いいね
  • 0
    コメント

HerokuにWordPressをのせる上で最も大事なたった1つの法則

「大事なのは『やっていく』という気持ち、なんですよね…。」

はじめに

株式会社タンバリンというところで働いているエンジニアです。サイトはまだない。
MHXはチャアク+ギルドスタイルにしていますがまだHR1です。頑張りたい。

本題、Heroku + WordPressでやっていくときに詰まったこと

HTTPSを設定するとハマる

最初は herokuapp.com のURLにしていたのですが、それをhttpsにしたら色々とつまづきました。
httpsのみで運用したく、管理画面の強制SSLとURLをhttpsに設定し、.htaccessに追記。

public/.htaccess
<IfModule mod_rewrite.c>

RewriteEngine On
RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R,L]
</IfModule>

結果:ログイン画面で永久にリダイレクトループ

HerokuではロードバランサがあるのでWordPressの is_ssl() が予想通りに動作しません。
公式ドキュメントを見るとちゃんと書いてありますね。

NB: this won't work for websites behind some load balancers, especially Network Solutions hosted websites. To bodgy up a fix, save this gist into the plugins folder and enable it. For details, read WordPress is_ssl() doesn’t work behind some load balancers.
Websites behind load balancers or reverse proxies that support HTTP_X_FORWARDED_PROTO can be fixed by adding the following code to the wp-config.php file, above the require_once call:

Function Reference/is ssl

if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https')
    $_SERVER['HTTPS'] = 'on';

wp-configに上記コードを設定してあげれば動くようです。
ちなみに私はこれを今更になって発見したので、テーマのセットアップフックにかませて $_SERVER['HTTPS'] = 'on'; を設定した覚えがあります。
そうすると管理画面でJavaScriptやCSSなどがhttpで読み込まれてinsecure mixed contentsを乱発するので、SSL Insecure Content Fixer をインストールしてなんとかしました。

読もう、ドキュメント。

2016/5/6追記
wp-configに上記コードを追加して、テーマのセットアップフックから例の記述を消し、Insecure Content Fixerを削除して無事動きました。

Session管理はMemcacher Addonで

ローカルのMAMP環境では正しく動いていたSession部分がどうもおかしいな〜と思い、papertrailでじーっと検証しているとdyno1とdyno2で値が違うことに気づき、そりゃそうだよね…という雑魚っぷりを発揮したことがあります。
ちゃんと公式のドキュメントにも書いてありますね。
PHP Session Handling on Heroku

composerでext-memcachedをインストールして、Memcachier Addon を追加しておけば万事okでした。
たぶんRedisでも出来るんですよね?というかんじはする。必要はない。

ちゃんと読もう、ドキュメント。

メールが送られてこない…

Sendgrid Addonを入れるだけで動くわけないじゃろ!(バンッ
WP Sendgrid Pluginをちゃんと入れてきちんと設定しましょう…。

バージョン管理されないファイルが消される

  1. 管理画面からアップロードした画像が消える
  2. 管理画面から編集したコードは反映されない
  3. 管理画面からプラグインのインストール・アップデートが出来ないことがある
  4. 管理画面からWordPressのアップデートが出来ない(たぶん)

1 についてはCloudinary Addonを使って解決しました。
実際の案件では帯域幅やアップロード制限があってだいぶ消耗したのですが、サポートの人が優しかったので問い合わせてみるといいと思います(丸投げ)。

2 ですが、まぁ、もともと管理画面からコード編集するなという話ですね。

3 についてはプラグインのアップデートマークが出たら毎度毎度プラグインを新たにダウンロードしてきて、上書きして、 $ git add public/wp-content/plugins を叩いて以下略という感じにしてます。面倒です。
なんかこう、上手く出来ないものかとは思ってます。

4、これ結構今困っていて、ローカル環境をMAMP→Vagrantと移してGitに乗せていたのですがhttpsに変更してからというものVagrantがうまく動かなくなったままにしてしまっているんですよね…。
オレオレ証明書とか作ったりせねばならないのかと調べようとして手が止まっています。やっていく気持ちが大事。

いまだに困ってるものと後悔しているもの

  • dynoが再起動するとCloudinaryの画像がキャッシュされてなくて毎回再読み込みしているような気がするんですけど
  • リリース後にWordPressのステージング環境を作ろうとするとすごく大変だし最初にやっておくべきであった
  • ローカル環境も先にちゃんとhttpsを見越して作っておくべきだった

やっていく気持ち

やっていく
やっていく気持ち・白字
(ステマとかではないです)

Heroku Advent Calendar 1日目の記事はこちら