From 37e5b95b8dbdaa9b06bdbc5cf70740d00f49321b Mon Sep 17 00:00:00 2001 From: Jeremy Zahner Date: Wed, 14 Oct 2015 22:19:35 +0200 Subject: [PATCH] Utilize ssh_options for setting rsync port. --- README.md | 156 +++++++++++++++++++++------- lib/capistrano/tasks/wpuploads.rake | 17 +-- lib/capistrano/wpcli/version.rb | 2 +- 3 files changed, 122 insertions(+), 53 deletions(-) diff --git a/README.md b/README.md index de4b5e7..65912f7 100644 --- a/README.md +++ b/README.md @@ -26,30 +26,66 @@ All you need to do is put the following in `Capfile` file: require 'capistrano/wpcli' -### How it works - -The following tasks are added to Capistrano: - -* `wpcli:run`
-Executes the WP-CLI command passed as parameter.
-Example: `cap production wpcli:run["core language install fr_FR"]` -* `wpcli:db:push`
-Pushes the local WP database to the remote server and replaces the urls.
-Optionally backs up the remote database before pushing (if `wpcli_backup_db` is set to true, see Configuration).
-Example: `cap production wpcli:db:push` -* `wpcli:db:pull`
+### How it works (Tasks) + + wpcli:run + +Executes the WP-CLI command passed as parameter. + + cap production wpcli:run["core language install fr_FR"] + +- - - + + wpcli:db:push + +Pushes the local WP database to the remote server and replaces the urls. + +Optionally backs up the remote database before pushing (if `wpcli_backup_db` is set to true, see Configuration). + + cap production wpcli:db:push + +- - - + + wpcli:db:pull + Pulls the remote server WP database to local and replaces the urls. -* `wpcli:db:backup:remote`
+ + cap production wpcli:db:pull + +- - - + + wpcli:db:backup:remote + Pulls the remote server WP database to localhost, uses `wpcli_local_db_backup_dir` to define the location of the export. -* `wpcli:db:backup:local`
-Backs up the local WP database, uses `wpcli_local_db_backup_dir` to define the location of the export. -* `wpcli:rewrite:flush`
+ +- - - + + wpcli:db:backup:local + +Backs up the local WP database to localhost, uses `wpcli_local_db_backup_dir` to define the location of the export. + +- - - + + wpcli:rewrite:flush + Flush rewrite rules. -* `wpcli:rewrite:hard_flush`
-Perform a hard flush - update `.htaccess` rules as well as rewrite rules in database. -* `wpcli:uploads:rsync:push`
+ +- - - + + wpcli:rewrite:hard_flush + +Perform a hard flush - updates `.htaccess` rules as well as rewrite rules in database. + +- - - + + wpcli:uploads:rsync:push + Push local uploads delta to remote machine using rsync. -* `wpcli:uploads:rsync:pull`
+ +- - - + + wpcli:uploads:rsync:pull + Pull remote uploads delta to local machine using rsync. ### Configuration @@ -58,43 +94,83 @@ This plugin needs some configuration to work properly. You can put all your conf Here's the list of options and the defaults for each option: -* `set :wpcli_remote_url`
+- - - + + set :wpcli_remote_url + Url of the WP root installation on the remote server (used by search-replace command). -* `set :wpcli_local_url`
+- - - + + set :wpcli_local_url + Url of the WP root installation on the local server (used by search-replace command). -* `set :local_tmp_dir`
-Absolute path to local directory temporary directory which is read and writeable. Defaults to `/tmp`. +- - - + + set :local_tmp_dir + +Absolute path to local directory temporary directory which is read and writeable. + +Defaults to `/tmp` + +- - - + + set :wpcli_backup_db -* `set :wpcli_backup_db`
Set to true if you would like to create backups of databases on each push. Defaults to false. -* `set :wpcli_local_db_backup_dir`
-Absolute or relative path to local directory for storing database backups which is read and writeable. Defaults to `config/backup`.
-IMPORTANT: Make sure to add the folder to .gitignore to prevent db backups from being in version control. +- - - + + set :wpcli_local_db_backup_dir + +Absolute or relative path to local directory for storing database backups which is read and writeable. + +Defaults to `config/backup` + +**IMPORTANT: Make sure to add the folder to .gitignore to prevent db backups from being in version control.** + +- - - + + set :wpcli_args + +You can pass arguments directly to WPCLI using this var. + +Defaults to `ENV['WPCLI_ARGS']` + +- - - + + set :wpcli_local_uploads_dir + +Absolute or relative path to local WP uploads directory. + +Defaults to `web/app/uploads/`. + +**IMPORTANT: Add trailing slash!** + +- - - + + set :wpcli_remote_uploads_dir + +Absolute path to remote wordpress uploads directory. -* `set :wpcli_args`
-You can pass arguments directly to WPCLI using this var. By default it will try to load values from `ENV['WPCLI_ARGS']`. +Defaults to `#{shared_path.to_s}/web/app/uploads/` -* `set :wpcli_local_uploads_dir`
-Absolute or relative path to local WP uploads directory. Defaults to 'web/app/uploads/'.
-IMPORTANT: Add trailing slash! +**IMPORTANT: Add trailing slash!** -* `set :wpcli_remote_uploads_dir`
-Absolute path to remote wordpress uploads directory. Defaults to "#{shared_path.to_s}/web/app/uploads/".
-IMPORTANT: Add trailing slash! +### FAQ -* `set :wpcli_rsync_port`
-If you for whatever reason need to set a different port for rsync you can do so by setting this var. Defaults to undefined.
+- What if i want to use a custom port for rsync? + You can by setting your port somewhere inside the :ssh_options precedence. + See here: http://capistranorb.com/documentation/advanced-features/properties/#precedence ### Vagrant If you are using another machine as a development server (Vagrant for example), you should define a `dev` role and indicate the path where the project lives on that server. This normally goes on `deploy.rb` file. Here's an example: -`server "example.dev", user: 'vagrant', password: 'vagrant', roles: %w{dev}` + server "example.dev", user: 'vagrant', password: 'vagrant', roles: %w{dev} -`set :dev_path, '/srv/www/example.dev/current'` + set :dev_path, '/srv/www/example.dev/current' ## Contributing diff --git a/lib/capistrano/tasks/wpuploads.rake b/lib/capistrano/tasks/wpuploads.rake index f34ad66..c3e59b2 100644 --- a/lib/capistrano/tasks/wpuploads.rake +++ b/lib/capistrano/tasks/wpuploads.rake @@ -1,21 +1,10 @@ namespace :load do task :defaults do - class Object - def blank? - respond_to?(:empty?) ? empty? : !self - end - end - # These options are passed directly to rsync # Append your options, overwriting the defaults may result in malfunction # Ex: --recursive --delete --exclude .git* - set :wpcli_rsync_options, "-avz --rsh=ssh" - - # To use a different port for ssh use the wpcli_rsync_port variable. - unless fetch(:wpcli_rsync_port).blank? - set :wpcli_rsync_options, "-avz --rsh=ssh -e 'ssh -p #{fetch(:wpcli_rsync_port)}'" - end + set :wpcli_rsync_options, "-avz --rsh=ssh --progress" # Local dir where WP stores the uploads # IMPORTANT: Add trailing slash! @@ -31,9 +20,13 @@ end namespace :wpcli do namespace :uploads do namespace :rsync do + desc "Push local uploads delta to remote machine" task :push do roles(:web).each do |role| + puts role.netssh_options[:port] + port = role.netssh_options[:port] || 22 + set :wpcli_rsync_options, fetch(:wpcli_rsync_options) + (" -e 'ssh -p #{port}'") run_locally do execute :rsync, fetch(:wpcli_rsync_options), fetch(:wpcli_local_uploads_dir), "#{role.user}@#{role.hostname}:#{fetch(:wpcli_remote_uploads_dir)}" end diff --git a/lib/capistrano/wpcli/version.rb b/lib/capistrano/wpcli/version.rb index 44d040f..69eed99 100644 --- a/lib/capistrano/wpcli/version.rb +++ b/lib/capistrano/wpcli/version.rb @@ -1,5 +1,5 @@ module Capistrano module Wpcli - VERSION = "0.1.1" + VERSION = "0.1.2" end end