mina
comes with a variety of plugins for you to use out of the box. As mina
is primarely written in ruby and for rails, it has
ruby plugins, but it can be used to deploy any other application (static, js, php, etc)
To use a plugin you only need to require it in your deploy.rb
. Most of the plugins come with a set of their
own variables which are usable, chengable and overwritable.
Example:
require 'mina/rails'
set :rails_env, 'staging'
You can also override a variable from command line like:
$ mina deploy rails_env=development
require 'mina/default'
:repository #=> nil
:domain #=> nil
:port #=> 22
:deploy_to #=> nil
:execution_mode #=> :pretty ## Can be [:exec, :pretty, :printer, :system]
See Execution mode
local_environment #=> Task to be run before all local tasks
remote_environment #=> Task to be run before all remote tasks
ssh_keyscan_domain #=> Adds repository host to the known hosts
ssh_keyscan_repo #=> Adds domain to the known hosts
run #=> Runs a command on the server; Example: `$ mina 'run[rake db:migrate]'`
ssh #=> Open an ssh session to the server and cd to deploy_to folder
require 'mina/deploy'
loads:
mina/default
:releases_path #=> "#{fetch(:deploy_to)}/releases"
:shared_path #=> "#{fetch(:deploy_to)}/shared"
:current_path #=> "#{fetch(:deploy_to)}/current"
:lock_file #=> 'deploy.lock'
:deploy_script #=> Mina.root_path('data/deploy.sh.erb')
:keep_releases #=> 5
:version_scheme #=> :sequence ## Can be [:sequence, :datetime]
:shared_dirs #=> []
:shared_fiels #=> []
# deploy:* tasks are not meant to be run outside `deploy do` block
deploy:force_unlock #=> Removes .force_unlock file
deploy:link_shared_paths #=> Link paths set in `:shared_dirs` and `:shared_files`
deploy:cleanup #=> Cleans up old releases
rollback #=> Rollbacks the latest release; does not rollback database
setup #=> Sets up the site
:version_scheme
variable sets the naming for your release folders.
# :sequence
.
├── releases
│ ├── 87
│ ├── 88
│ ├── 89
│ ├── 90
│ ├── 91
│ └── 92
# :datetime
.
├── releases
│ ├── 20170701123242
│ ├── 20170704131253
│ ├── 20170708032142
│ ├── 20170710082353
│ └── 20170720012031
require 'mina/git'
loads:
mina/default
:branch #=> 'master'
:remove_git_dir #=> true
:remote #=> 'origin'
:git_not_pushed_message #=> "Your branch #{fetch(:branch)} needs to be pushed to #{fetch(:remote)} before deploying"
# git:clone is not meant to be run outside `deploy do` block
git:clone #=> Clones the Gir repository to the current path
git:revision #=> Prints out current revision
git:ensure_pushed #=> Ensures local repository is pushed to remote
require 'mina/bundler'
loads:
mina/default
:bundle_bin #=> 'bundle'
:bundle_path #=> 'vendor/bundle'
:bundle_withouts #=> 'development test'
:bundle_options #=> "--without #{fetch(:bundle_withouts)} --path "#{fetch(:bundle_path)}" --deployment"
:shared_dirs #=> fetch(:shared_dirs, []).push(fetch(:bundle_path)) ## Add `bundle_path` to `shared_dirs`
bundle:install #=> Install gem dependencies using Bundler
bundle:clean #=> Cleans up unused gems in your bundler directory
require 'mina/rails'
loads:
mina/deploy
mina/bundler
:rails_env #=> 'production'
:bundle_prefix #=> %{RAILS_ENV="#{fetch(:rails_env)}" #{fetch(:bundle_bin)} exec}
:rake #=> "#{fetch(:bundle_prefix)} rake"
:rails #=> "#{fetch(:bundle_prefix)} rails"
:compiled_asset_path #=> 'public/assets'
:asset_dirs #=> ['vendor/assets/', 'app/assets/']
:migration_dirs #=> ['db/migrate']
:force_migrate #=> false
:force_asset_precompile #=> false
console #=> Starts and interactive console
log #=> Tail log from server
rails[command] #=> Runs rails command; example `$ mina 'rails[console]'`
rake[command] #=> Runs rake command; example `$ mina 'rake[db:migrate]'`
# rails:* tasks are not meant to be run outside of `deploy do` block. Please use the tasks above.
rails:db_migrate #=> Checks for changes in `:migration_dirs` and runs `db:migrate` if needed. Can be forced with `:force_migrate` variable
rails:assets_precompile #=> Checks for changes in `:asset_dirs` and runs `assets:precomile` if needed. Can be fored with `:force_asset_precompile` variable
rails:db_create #=> Runs `db:create`
rails:db_rollback #=> Runs `db:rollback`
rails:assets_clean #=> Runs `assets:clean`
rails:db_schema_load #=> Runs `db:schema:load`