Wordpressの管理(デプロイ etc)にはvccwにお世話になっています。
ただ、最近データベースをデプロイする時に以下のエラーがよく発生します。
wordmove/sql_adapter.rb:44:in `gsub!': invalid byte sequence in UTF-8 (ArgumentError)
vccw内でデプロイを行う場合、Wordmoveというライブラリを使用しています。
WordmoveではWordpressのデータベースに含まれているホスト名を自動で置換してくれる処理が含まれているのですが、この処理でエラーが発生しているようです。
対策としてvccw内のWordmoveをアップデートしてWordpress cli(wp search-replace)を使った置換方式に変更します。
なお、きちんと確認はしていませんが以下のようにエラーが発生しているようです。
- Wordpressのデータベースをmysqldumpを使用してテキストに出力
- dumpファイル(テキスト)をデプロイ先にアップロード
- dumpファイル内にあるhost名をruby内で置換
- dumpファイルにUTF-8形式以外の文字列が含まれているためエラー
インストール済みのRubyを削除する
まずはvccw内のubuntuに含まれているオリジナルのrubyを削除します。2017.11現在ubuntuのRubyバージョンは2.3ですが、Wordmoveの最新バージョンではRubyバージョン2.4が必要となります。
$ sudo apt-get remove ruby
brightboxのレポジトリを追加
brightboxのレポジトリを追加します。
Rubyを一からビルドするのが面倒なのでビルド済みのパッケージを使用します。brightboxはUKのCloud Hosting会社のようですが、信用ならない人は一からビルドすることをおすすめします。
$ sudo apt-add-repository ppa:brightbox/ruby-ng
$ sudo apt-get update
Ruby2.4をインストール
Rubyバージョン2.4をインストールします。rubyという名前のパッケージではなくruby2.4というバージョンを含んだ形の名前になっていますので注意して下さい。
$ sudo apt-get install ruby2.4 ruby2.4-dev
Rubyバージョンの確認
rubyコマンドが問題なく使用できるか確認します。
$ ruby -v
ruby 2.4.2p198 (2017-09-14 revision 59899) [x86_64-linux-gnu]
なお、ruby2.4というコマンドでもRubyが使えるようです。
また、複数のバージョンをインストールしてもrbenvのようにバージョンを切り替える方法も備えているようです。ruby-switchを確認してみて下さい。
Gemを使用してWordmoveをインストール
Gemを使用してWordmoveをインストールします。vccwではWordmoveの他にbundlerもインストールしていたのでインストールしておきます。
$ gem install bundler
$ gem install wordmove
bundler がどのように使用されているか確認できていません。もしかするとbundlerのバージョンが異なることでエラーが起きるかもしれません。
Wordmoveの設定を変更してデプロイ
最新のWordmoveではMovefileに以下の設定が追加となっています。
global:
sql_adapter: "default"
defaultはrubyを使ったテキスト置換処理となります。wordpress cliを使用した置換に変更したい場合は以下のようにします。
global:
sql_adapter: "wpcli"
この状態で push or pull を実行するとwordmove内でwp search-replaceを使用した置換処理を実行してくれます。