WordPress
wordmove

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

More than 3 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