diff options
author | Rafael Mendonça França <rafaelmfranca@gmail.com> | 2013-04-19 11:23:56 -0300 |
---|---|---|
committer | Rafael Mendonça França <rafaelmfranca@gmail.com> | 2013-04-19 11:23:56 -0300 |
commit | db1594c61c0cd1de53eeaf9e705a609ac8ba95a0 (patch) | |
tree | 88c978b5092198dd86cba9a5fefdee4e1ade2a07 /activerecord/lib/active_record | |
parent | 77fec1344bfbf7c01f595afbf752633c0eaeed10 (diff) | |
parent | 2976558bc3a02019b605a1d70fda76ba5e9b5df2 (diff) | |
download | rails-db1594c61c0cd1de53eeaf9e705a609ac8ba95a0.tar.gz rails-db1594c61c0cd1de53eeaf9e705a609ac8ba95a0.tar.bz2 rails-db1594c61c0cd1de53eeaf9e705a609ac8ba95a0.zip |
Merge pull request #10217 from mirasrael/make-migrator-run-transactional-4.0
Support transactions in Migrator.run
Conflicts:
activerecord/CHANGELOG.md
Diffstat (limited to 'activerecord/lib/active_record')
-rw-r--r-- | activerecord/lib/active_record/migration.rb | 17 |
1 files changed, 12 insertions, 5 deletions
diff --git a/activerecord/lib/active_record/migration.rb b/activerecord/lib/active_record/migration.rb index 451104106c..d2f10cf2ac 100644 --- a/activerecord/lib/active_record/migration.rb +++ b/activerecord/lib/active_record/migration.rb @@ -867,11 +867,18 @@ module ActiveRecord alias :current :current_migration def run - target = migrations.detect { |m| m.version == @target_version } - raise UnknownMigrationVersionError.new(@target_version) if target.nil? - unless (up? && migrated.include?(target.version.to_i)) || (down? && !migrated.include?(target.version.to_i)) - target.migrate(@direction) - record_version_state_after_migrating(target.version) + migration = migrations.detect { |m| m.version == @target_version } + raise UnknownMigrationVersionError.new(@target_version) if migration.nil? + unless (up? && migrated.include?(migration.version.to_i)) || (down? && !migrated.include?(migration.version.to_i)) + begin + ddl_transaction(migration) do + migration.migrate(@direction) + record_version_state_after_migrating(migration.version) + end + rescue => e + canceled_msg = use_transaction?(migration) ? ", the migration canceled" : "" + raise StandardError, "An error has occurred#{canceled_msg}:\n\n#{e}", e.backtrace + end end end |