Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
Help us understand the problem. What is going on with this article?

wordmoveのMovefileのエラーを解決してみた in さくらレンタルサーバ

More than 5 years have passed since last update.

wordmoveとは?

VCCWを使ってwordpress向けの開発環境を作る場合、wordmoveというツールが組み込まれています。
これを使うとpull/pushで環境のバックアップやデプロイができるようになりますが、そのために必要なMovefileの作成およびpullで詰んだのでメモ。

なお、さくらインターネットの人は特にDBで詰むと思いますのでMovefile内でcharsetの設定が必要です。この設定はwordmove initした時にも記載されていないので見逃しがちです(後述)。

利用までの手順

まず、開発環境に入ります。

vagrant ssh # ローカルでssh-addしている状態で入る

そしてwordmoveのインストールを確認します。

wordmove

これで下記の表示が出ればパスが通っているのでひとまずOK

Commands:
  wordmove help [COMMAND]  # Describe available commands or one specific c...
  wordmove init            # Generates a brand new Movefile
  wordmove pull            # Pulls WP data from remote host to the local m...
  wordmove push            # Pushes WP data from local machine to remote host

wordmoveで手元にバックアップするためには下記のコマンドを打ちます。

wordmove init # 新しいMovefileができる
vim Movefile # Movefileの内容を編集する
wordmove pull --all # 本番環境からpullしてくる

ここで、wordmove initした直後のMovefileは下記の通り。

Movefile(default)
local:
  vhost: "http://wordpress.local/"
  wordpress_path: "/var/www/wordpress/" # use an absolute path here

  database:
    name: "wordpress"
    user: "wordpress"
    password: "wordpress"
    host: "localhost"

staging:
  vhost: "http://example.com"
  wordpress_path: "/var/www/your_site" # use an absolute path here

  database:
    name: "database_name"
    user: "user"
    password: "password"
    host: "localhost"

  exclude:
    - ".git/"
    - ".gitignore"
    - ".sass-cache/"
    - "bin/"
    - "tmp/*"
    - "Gemfile*"
    - "Movefile"
    - "wp-config.php"
    - "wp-content/*.sql"

  # paths: # you can customize wordpress internal paths
  #   wp_content: "wp-content"
  #   uploads: "wp-content/uploads"
  #   plugins: "wp-content/plugins"
  #   themes: "wp-content/themes"
  #   languages: "wp-content/languages"
  #   themes: "wp-content/themes"

  # ssh:
  #   host: "host"
  #   user: "user"
  #   password: "password" # password is optional, will use public keys if available.
  #   port: 22 # Port is optional
  #   rsync_options: "--verbose" # Additional rsync options, optional
  #   gateway: # Gateway is optional
  #     host: "host"
  #     user: "user"
  #     password: "password" # password is optional, will use public keys if available.

  # ftp:
  #   user: "user"
  #   password: "password"
  #   host: "host"
  #   passive: true

# production: # multiple environments can be specified
#   [...]

何も考えずsshの前の#をとってしまうと下記のエラーメッセージが出ます。。。

▬▬ ✓ Using Movefile: ./Movefile ▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬
/usr/local/rbenv/versions/2.1.2/lib/ruby/2.1.0/psych.rb:370:in `parse': (<unknown>): did not find expected key while parsing a block mapping at line 12 column 3 (Psych::SyntaxError)
    from /usr/local/rbenv/versions/2.1.2/lib/ruby/2.1.0/psych.rb:370:in `parse_stream'
    from /usr/local/rbenv/versions/2.1.2/lib/ruby/2.1.0/psych.rb:318:in `parse'
    from /usr/local/rbenv/versions/2.1.2/lib/ruby/2.1.0/psych.rb:245:in `load'
    from /usr/local/rbenv/versions/2.1.2/lib/ruby/gems/2.1.0/gems/wordmove-1.2.0/lib/wordmove/deployer/base.rb:58:in `fetch_movefile'
    from /usr/local/rbenv/versions/2.1.2/lib/ruby/gems/2.1.0/gems/wordmove-1.2.0/lib/wordmove/deployer/base.rb:20:in `deployer_for'
    from /usr/local/rbenv/versions/2.1.2/lib/ruby/gems/2.1.0/gems/wordmove-1.2.0/lib/wordmove/cli.rb:45:in `pull'
    from /usr/local/rbenv/versions/2.1.2/lib/ruby/gems/2.1.0/gems/thor-0.19.1/lib/thor/command.rb:27:in `run'
    from /usr/local/rbenv/versions/2.1.2/lib/ruby/gems/2.1.0/gems/thor-0.19.1/lib/thor/invocation.rb:126:in `invoke_command'
    from /usr/local/rbenv/versions/2.1.2/lib/ruby/gems/2.1.0/gems/thor-0.19.1/lib/thor.rb:359:in `dispatch'
    from /usr/local/rbenv/versions/2.1.2/lib/ruby/gems/2.1.0/gems/thor-0.19.1/lib/thor/base.rb:440:in `start'
    from /usr/local/rbenv/versions/2.1.2/lib/ruby/gems/2.1.0/gems/wordmove-1.2.0/bin/wordmove:6:in `<top (required)>'
    from /usr/local/rbenv/versions/2.1.2/bin/wordmove:23:in `load'
    from /usr/local/rbenv/versions/2.1.2/bin/wordmove:23:in `<main>'

sshの記載のある階層が合ってないのが問題なので、スペースにより下記のような階層に合わせます。念のため作成後にYaml lintを通しておくと安心です。

なお、パスワードをコメントアウトしているのはsshログインをエージェントフォワードで解決できるためです。事前にVagrantfileでconfig.ssh.forward_agent = trueのように設定しておきましょう。

Movefile(一部抜粋)
staging:
  vhost: "http://XXX.example.com" # http://XXX.example.comなど本番ドメインを記載
  wordpress_path: "/home/XXX/www/" # use an absolute path here

  database:
    name: "Wordpress用の本番DBname"
    user: "本番ユーザ名"
    password: "本番DBのパスワード"
    host: "mysqlXXX.db.sakura.ne.jp" # さくらレンタルサーバの場合
    charset: "utf8" # ←dumpファイルの文字コードをutf8に固定。initにはないのでこの行を追記します

  exclude:
    - ".git/"
    - ".gitignore"
    - ".sass-cache/"
    - "bin/"
    - "tmp/*"
    - "Gemfile*"
    - "Movefile"
    - "wp-config.php"
    - "wp-content/*.sql"

  # paths: # you can customize wordpress internal paths
  #   wp_content: "wp-content"
  #   uploads: "wp-content/uploads"
  #   plugins: "wp-content/plugins"
  #   themes: "wp-content/themes"
  #   languages: "wp-content/languages"
  #   themes: "wp-content/themes"

  ssh:
    host: "XXXXX.sakura.ne.jp"
    user: "XXXXX"
  #  password: "passward" # password is optional, will use public keys if available.
  #  port: 22 # Port is optional
    rsync_options: "--verbose" # Additional rsync options, optional
  #   gateway: # Gateway is optional
  #     host: "host"
  #     user: "user"
  #     password: "password" # password is optional, will use public keys if available.

わかってしまうと単純なのですが、#のあるところが基準になっているんですね。yamlに慣れていないと単なるコメントアウトかなくらいの体だと思い、案外詰んでしまうというお話でした。

おまけ

vagrant ssh後のMovefileを外部エディタでサクッと触りたい場合は、ローカルのwww/wordpress/に置いておけばすぐ編集できます。vagrant内だとvar/www/wordpress/がそれに対応します。

wordmoveの詳しい使い方で参考になるサイト

WordMoveを使ってVagrant内のWordPressと本番環境を同期する!
http://firegoby.jp/archives/5644

wordmoveでローカルのWordPressを速攻デプロイ
http://tanshio.net/wordmove/

なお、Pulling Databaseの所でwp-configの文字コード、テーブル内の文字コードでエラーが出る事があります。その場合は対象がUTF−8になっているかを確認するのも大事です。さくらサーバで動かしている場合はDBをUTF−8で作っていると思いますのでMovefileの設定さえ行っていれば問題ありません。

invalid byte sequence in UTF-8 (ArgumentError) #65
https://github.com/welaika/wordmove/issues/65

Invalid byte sequence in UTF-8 on db synchronize #74
https://github.com/welaika/wordmove/issues/74

Problem when trying to push/pull database #90
https://github.com/welaika/wordmove/issues/90

*追記*さくらレンタルサーバ(VPSではなく)スタンダード以上の場合

さくらのmysqldumpの初期設定はujisですが、rootのないレンタルサーバでは設定できません。なので、dumpファイルがutf8にならずエラーするという罠があります。
wordmoveの中身を見るとcharsetオプションが準備されているため、Movefileへcharsetの設定を追記してクライアント側で解決しています

参考:wordmove / lib / wordmove / deployer / base.rb

hiro93n
保育をハックするユニファ/UniFa株式会社のプロダクトマネージャーでIAの人。2019/11-12の2ヶ月に育休とりました。2016年からHCD-net認定 人間中心設計専門家、WebWG&認定センターの中の人。ねこ大好き。
https://ymtk.dev
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away