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は下記の通り。
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
のように設定しておきましょう。
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の設定を追記してクライアント側で解決しています