WP-CLI を使用してリモートデータベースをインポートする作業を自動化したいのですが。
現在のプロセスはサーバーに対して ssh
であり、 WP-CLI を使用して export
ファイルを実行し、 scp
または rsync
を介してファイルをローカルディレクトリにコピーします。 、そして import
WP-CLIを通してファイル。 @alias
を利用して、ここでできるだけ多くのステップを削除したいと思います。
私はこのようなことが可能であると考えたいのですが:
echo "$(wp @remote db export -)" | wp @local db import -
5 GBを超えるDBサイズが圧縮されていない場合、これはより現実的な選択肢のように思えます。
DB_EXPORT=$(echo "$(wp @remote db export -)" | gzip | base64 -w0); echo "$DB_EXPORT" | base64 -d | gunzip | wp @local db import -
あいにく私は端末の限界に当たっているかもしれませんし、あるいはこの呼び出しの構造は片付けられるべきです私のウィンドウはちょうどハングしているようです。
このプロセスからscp
を削除できる別の解決策はありますか?ここで利用できる他のコマンドはありますか?ここでは例からマルチサイトを削除しましたが、それはエイリアスの一部になる可能性のある考慮すべき点でもあります。
理想的には、私は将来的にこのような何かを願っています:
wp @local db import @remote
@alias
を Basic Vagrant box と共に使用する現在の設定例。
~/.wp-cli/config.yml
@basic:
ssh: basic.dev/var/www/wordpress/
~/.ssh/config
Host basic.dev
HostName basic.dev
User vagrant
IdentityFile ~/sites/basic.dev/.vagrant/machines/default/virtualbox/private_key
アップデート
@davemac /このプロセスは簡単に次のように単純化できるように見えます。
wp db import - <<< $(wp db export -);
今、私はMU-Siteの tablesとsite_url を考慮に入れる必要があります。
wp @basic db export --tables=$(wp @basic db tables --url=http://basic.dev/site/ --format=csv) - | gzip > basic-dev-site.sql.gz
blog_id=$(wp @basic eval --url=http://basic.dev/site/ 'echo get_current_blog_id();');
prefix=$(wp @basic eval --url=http://basic.dev/site/ 'global $wpdb; echo $wpdb->prefix;')
site_url=$(wp @basic eval "echo site_url();")
search-replace
を使用する - thanks @WestonRuter
sql=$(wp search-replace $(wp eval "echo site_url();" | cut -d ":" -f2) "//new-site.com" --network --skip-columns=guid --export); printf "%s" "$sql"
WPマルチサイト - ファイルを使用せずにリモートサイトをローカルインポートにエクスポートします。
wp @remote db export --tables=$remote_tables - | sed "s#$remote_prefix#$local_prefix#g" | sed "s#$remote_site_domain#$local_site_domain#g" | wp @local db import -
よく似ている
WP-CLI 0.24.0 以降、 エイリアス を使用することで、リモートデータベースを非常に簡単にインポートできます。
別名を使用すると、別のWP-CLIインストールに対してWP-CLIコマンドを実行できます。そのインストールはリモートマシンかもしれません。
これを念頭に置いて、リモートWPデータベースをローカルサイトに取り込むためにいくつかのWP-CLIコマンドをチェーンするbashエイリアスをまとめました。この場合、私はプロダクションサイトのエイリアスとして@prodを設定したローカルのwp-cli.ymlファイルを持っています(これはSSHエイリアスを使用します)。
pullprod() {
# make a backup of the current local database
wp db export _db.sql
wp db reset --yes
# get current directory name, used for database and URL
current=${PWD##*/}
# connect to remote site and ssh the remote database down to our local directory
wp @prod db export - > $current.sql
echo "copying of remote database to $current directory complete."
wp db import
# database is now imported so we can delete it
rm -rf $current.sql
# get the remote site URL, remove the http:// for our search replace
production_url=$(wp @prod eval '$full_url=get_site_url();$trimmed_url=str_replace("http://", "", $full_url); echo $trimmed_url;')
wp search-replace "$production_url" "$current.localhost"
echo "All done, enjoy!"
}
現在のWPサイトにあるpullprod
コマンドは、エイリアスが設定されているので、必要なことを実行します(これも自動化することができます)。
それはうまくいきますが、私の次の仕事は、$ production_url変数の取得方法を改善することです。現時点では、ローカルファイルからそれを取得しています。