Departure is an ActiveRecord connection adapter that allows running
MySQL online and non-blocking DDL through ActiveRecord::Migration
without needing
to use a different DSL other than Rails' migrations DSL.
It uses pt-online-schema-change
command-line tool of
Percona
Toolkit
which runs MySQL alter table statements without downtime.
This project was formerly known as "Percona Migrator", but this incurs in an infringement of Percona's trade mark policy and thus has to be renamed. Said name is likely to cause confusion as to the source of the wrapper.
The next major versions will use "Departure" as gem name.
Departure relies on pt-online-schema-change
from Percona
Toolkit
brew install percona-toolkit
apt-get install percona-toolkit
pacman -S percona-toolkit perl-dbd-mysql
For other Linux distributions check out the Percona Toolkit download page to find the package that fits your distribution.
You can also get it from Percona's apt repository
Once installed, add this line to your application's Gemfile:
gem 'percona_migrator'
And then execute:
$ bundle
Or install it yourself as:
$ gem install percona_migrator
Once you added it to your app's Gemfile, you can create and run Rails migrations as usual.
All the ALTER TABLE
statements will be executed with
pt-online-schema-change
, which will provide additional output to the
migration.
If you moved to Soundcloud's Lhm already,
we got you covered. Departure overrides Lhm's DSL so that all the alter
statements also go through pt-online-schema-change
as well.
You can keep your Lhm migrations and start using Rails migration's DSL back again in your next migration.
You can override any of the default values from an initializer:
PerconaMigrator.configure do |config|
config.tmp_path = '/tmp/'
end
It's strongly recommended to name it after this gems name, such as
config/initializers/percona_migrator.rb
When booting your Rails app, Departure extends the
ActiveRecord::Migration#migrate
method to reset the connection and reestablish
it using the PerconaAdapter
instead of the one you defined in your
config/database.yml
.
Then, when any migration DSL methods such as add_column
or create_table
are
executed, they all go to the
PerconaAdapter.
There, the methods that require ALTER TABLE
SQL statements, like add_column
,
are overriden to get executed with
PerconaMigrator::Runner,
which deals with the pt-online-schema-change
binary. All the others, like
create_table
, are delegated to the ActiveRecord's built in Mysql2Adapter and
so they follow the regular path.
PerconaMigrator::Runner
spawns a new process that runs the pt-online-schema-change
binary present in
the system, with the apropriate arguments for the generated SQL.
When an any error occurs, an ActiveRecord::StatementInvalid
exception is
raised and the migration is aborted, as all other ActiveRecord connection
adapters.
After checking out the repo, run bin/setup
to install dependencies. Then, run
rake spec
to run the tests. You can also run bin/console
for an interactive
prompt that will allow you to experiment.
To install this gem onto your local machine, run bundle exec rake install
. To
release a new version, update the version number in version.rb
, and then run
bundle exec rake release
, which will create a git tag for the version, push
git commits and tags, and push the .gem
file to
rubygems.org.
Bug reports and pull requests are welcome on GitHub at https://github.com/redbooth/percona_migrator.
Please note that this project is released with a Contributor Code of Conduct. By participating in this project you agree to abide by its terms.
Check the code of conduct here
You can consult the changelog here
The gem is available as open source under the terms of the MIT License.