Wordmoveでrsync: empty remote が出て同期できなくてハマった

macOS で wordmove 実行時の「rsync: empty remote host」エラーの対処法

原因

macOS のアップデート等により、以下のような状況が発生していた:

  • macOS に標準搭載の rsyncopenrsync)は非常に古く、バージョン 2.6.9 相当
  • wordmove はこの古い rsync を利用しようとしてエラーを起こす
  • Homebrew で新しい rsync(3.x系)をインストールしても、パスの優先順位の関係で古い方が呼ばれていた
  • wordmove -dは問題ないがwordmove -tなどでエラー

解決手順

  1. Homebrew で最新の rsync をインストール
    brew install rsync
    • Homebrew 版 rsync をシステムにリンク
      brew link rsync
    • rsync が正しいパスにあるか確認
      which rsync
      # => /usr/local/bin/rsync になっていればOK
    • バージョン確認(3.x 以上が必要)
      rsync --version
      # => rsync version 3.x.x
    • もしバージョンが変わっていない場合の対処 macOS の標準の古い rsync が優先されている可能性があるので、シェルの設定ファイルに以下を追加し、brew 版のパスを優先させる:
      # ~/.zshrc もしくは ~/.bash_profile に追記
      export PATH="/usr/local/bin:$PATH"
      その後、設定を反映させる:
      source ~/.zshrc # or source ~/.bash_profile
      再度 which rsyncrsync --version を確認して、 /usr/local/bin/rsync かつ 3.x 以上になっていることを確認。
    • Wordmove を再実行
      wordmove pull -e production -t

    この対応で rsync: empty remote host 問題は解消するはずです 💪

    WordmoveでサブディレクトリにインストールしたWPをFTP経由でpush -d/pull -dができなかった原因と対応

    ローカル環境をVCCWで立ち上げるとWordmoveもインストールされていますので、サーバーとローカルのデータの同期がとても楽ですね。

    WordmoveはSSHとFTPのどちらも対応していて、今回はFTPで接続する必要がありました。

    ルート直下へのWordPress設置ではなく、サブディレクトリ(/wordpress/)への設置をしましたので、Movefileの設定は次のようにしていました。

    local:
     vhost: "http://test.local"
     wordpress_path: "/var/www/wordpress/wordpress"
    
    staging:
     vhost: "http://test.com"
     wordpress_path: "/public_html/wordpress" # use an absolute path here

    これでwordmove push -dをするとエラーでリモートのデータベースに反映されません。

    ▬▬ ✓ Pushing Database ▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬
     remote | write /test.com/wordpress/wp-content/dump.php
     local | download http://test.com/wp-content/dump.php?shared_key=73b11018f2b6797ce265b36d8983489bfc4194ea3e5c114be5b4e39314cef4f03e6646edbbf7a092 > /var/www/wordpress/wordpress/wp-content/remote-backup-1450333959.sql
    /usr/local/rbenv/versions/2.1.2/lib/ruby/2.1.0/open-uri.rb:353:in `open_http': 404 Not Found (OpenURI::HTTPError)

    ぐぐると、Wordmoveのバージョンを1.2.0にダウングレードして対応するということがあったのですが、VCCWでインストールされているものは1.2.0でしたので、関係はなさそうです。

    FTP 経由の wordmove pull で、DB が反映されないバグを解決する方法

    エラーをよく見ていると、サブディレクトリが抜けているのがわかります。これですね。ディレクトリがないので404なんですね。

    local | download http://test.com/wp-content/dump.php...

    仕様なのかバグなのか分からないですが、サブディレクトリはうまくいかないようなので、Movefileのvhostにサブディレクトリを追加してみます。

    local:
     vhost: "http://test.local/wordpress"
     wordpress_path: "/var/www/wordpress/wordpress"
    
    staging:
     vhost: "http://test.com/wordpress"
     wordpress_path: "/public_html/wordpress" # use an absolute path here

    localの方は変えなくても大丈夫かもしれませんが、一応両方合わせておきます。

    これでもう一度wordmove push -dでリモートのデータベースも反映されました。
    たぶんwp_optionのhomeとかも変わってしまいますが、wp-config.phpに次の設定をしておけば大丈夫なはずです。

    便利ですWordmove。

    define( 'WP_HOME', 'http://test.com' );
    define( 'WP_SITEURL', 'http://test.com/wordpress' );