Fork me on GitHub
Mina Upgrading notes

Upgrading notes

Upgrading to v0.2.0

Note: these are upgrade notes to the unreleased v0.2.0 version due to be released soon.

Mina v0.2.0 is backwards-compatible, except for the deprecated :revision setting (which wasn’t widely used anyway). However, Mina 0.2.0 adds new features and conveniences that may make it easier to implement tasks you’re already doing.

New default script

The new default deploy script generated by mina init has been improved to add more helpful comments to get you started. While not really necessary, try doing mina init in an empty directory to see the new default script.

# In an empty directory:
$ mina init
$ cat config/deploy.rb

RVM support

The previous recommendation was to make your ~/.bashrc load RVM. This was a little problematic: in Ubuntu systems, RVM wasn’t always loaded because .bashrc wasn’t loaded entirely in interactive shells. Also, some people prefer to load RVM in ~/.bash_profile.

To use RVM on Mina 0.2, make a task called :environment and from there, invoke rvm:use[RUBY_VERSION@GEMSET] like so:

# config/deploy.rb
require 'mina/rvm'

task :enviroment do
  invoke :'rvm:use[ruby-1.9.2@default]'
end

task :deploy => :environment do
  ...
  # continue as usual
  ...
end

You do not need to create an .rvmrc file, although it is supported. In fact, as .rvmrc files are usually environment-specific, this practice is discouraged.

A sample configuration can be seen by creating a new project using mina init (see “New default script” section above).

rbenv support

Mina v0.2 also features rbenv support. Like in RVM, older solutions of loading rbenv in ~/.bashrc will continue to work, however you’re recommended to use the new rbenv:load task.

# config/deploy.rb
require 'mina/rbenv'

task :enviroment do
  invoke :'rbenv:load'
end

task :deploy => :environment do
  ...
  # continue as usual
  ...
end

Be sure to commit your .rbenv-version file in your project repository.

Git: removed the :revision setting

The :revision setting has been removed in Mina v0.2.0. This used to allow you to deploy any given Git branch, tag, or commit.

It has now been superceded by the :commit and :branch settings. To deploy a branch, set the :branch setting:

set :branch, 'master'

And to deploy a given commit, set the :commit setting:

set :commit, '2f19299a'

The reason for this change is that Git deploys are now optimized to be much faster when branches are specified.

Git: the default branch is now ‘master’

In Mina v0.1.x, the default deploy behavior is to deploy whatever the current commit is in your Git working repository.

In 0.2.0, the default is now the master branch. To change this, change the :branch setting:

set :branch, 'deploy'

The deploy:link_shared_paths task has been existing since Mina v0.1.x, but was not documented.

To make certain directories/files shared between different releases, first specify them in the :shared_paths setting:

set :shared_paths, ['log', 'config/database.yml']

And link them in your deploy script by invoking deploy:link_shared_paths:

task :deploy => :environment do
  deploy do
    invoke :'git:clone'
    invoke :'deploy:link_shared_paths'
    ...
    ...
  end
end

New ‘:environment’ task convention

Mina introduces a new recommended convention of defining an :environment task to do initializations used for every command.

It is often used to load RVM or rbenv so that it will be available in mina deploy, mina rake[db:migrate], and other similar tasks.

Define the task in your deploy script like so:

task :environment do
  invoke :'rbenv:load'
end

Then make the deploy task depend on it:

task :deploy => :environment do
  ...
end

This instructs Rake (or rather, Mina) to load the :environment task before deploying.

This is entirely optional, but highly recommended.