Railsで作成しているアプリにWordPressのブログを統合してみたのでその時の話を書きます。
RailsアプリとWordPressは別サーバで可動させており、サブドメインで完全に分離していたのですがこれを一緒にしようというコンセプトです。
もともとはRailsのアプリにブログエンジンくっつけるならヘッドレスCMSで有名なButterCMSが簡単なのでそれを検討していたのですがいろいろ問題があり、この案は没になりました。
- もともとWordPressで作ったブログが有り、移植するならButterCMSにそれなりに課金する必要がある
- ButterCMSは掲載記事数で月額費用が変わるが、現行のブログは1000記事近くあるので月額にして3万ほど取られそう
- WordPressで使っているプラグインはいくつかあるが、それらはButterCMSでは引き継がれずすべて自作する必要がある(PolyLangなど)
こんな感じなのでだったら最初から自分でRails上でなんとか作れないかと考えたところ、思い浮かんだのがWordPressのREST APIで連携して記事をDB保存してRails側で表示するというもの。
ちなみにREST APIとはこんなようなイメージです。
(Your Website)/wp-json/wp/v2/posts
ただ、これだとAuthor(著者)とか細かい情報は取得できません。細かい情報を出すには
?_embed
みたいなパラメータを付ける必要があります。更に弊社のブログには言語対応もしているのでその情報も付加すると
?_embed&lang=31
のようなパラメータになります。意外とそのまま使っているだけでは細かいデータは取得できないようになっています。
それでも歴史や利用者の多いWordPressにはこういったことへの対応方法がきちんと用意されています。
【参考】WordPressのREST APIにAll in One SEOの項目を追加する方法
https://qiita.com/hardreggaecafe/items/4b3a0b351e708b15c5aa
また、弊社サイトはMySQLを使っているのですがデフォルトのDB設定ではWordPressで作成した記事を丸ごとDBに挿入できませんでした。パケットサイズのエラーというものになりました。
ActiveRecord::StatementInvalid: Mysql2::Error: The size of BLOB/TEXT data inserted in one transaction is greater than 10% of redo log size. Increase the redo log size using innodb_log_file_size.
これを回避するためDBのmy.cnf(AWSのRDSではパラメータグループ)の
max_allowed_packet=256MB
innodb_buffer_pool_size = 1000M
innodb_log_file_size = 1000M
を修正。普通にDB格納ができるようにしました。