Zulhilmi Zainudin
Zulhilmi Zainudin

Reputation: 9365

"An error has occurred, this and all later migrations canceled" after AddIndexToUsersEmail

I'm following RailsTutorial eBook on Modelling Users (chapter 6). I am trying to add index to users email by running this command:

rails generate migration add_index_to_users_email

Which give me db/migrate/[timestamp]_add_index_to_users_email.rb file:

class AddIndexToUsersEmail < ActiveRecord::Migration
  def change
    add_index :users, :email, unique: true # I add this line
  end
end

But when I try run bundle exec rake db:migrate command, I get this inside my Terminal:

== 20150612073526 AddIndexToUsersEmail: migrating =============================
-- add_index(:users, :email, {:unique=>true})
   -> 0.0015s
== 20150612073526 AddIndexToUsersEmail: migrated (0.0016s) ====================

rake aborted!
StandardError: An error has occurred, this and all later migrations canceled:

SQLite3::BusyException: database is locked: commit transaction/usr/local/rvm/gems/ruby-2.1.5@rails4/gems/sqlite3-1.3.9/lib/sqlite3/statement.rb:108:in `step'
/usr/local/rvm/gems/ruby-2.1.5@rails4/gems/sqlite3-1.3.9/lib/sqlite3/statement.rb:108:in `block in each'
/usr/local/rvm/gems/ruby-2.1.5@rails4/gems/sqlite3-1.3.9/lib/sqlite3/statement.rb:107:in `loop'
/usr/local/rvm/gems/ruby-2.1.5@rails4/gems/sqlite3-1.3.9/lib/sqlite3/statement.rb:107:in `each'
/usr/local/rvm/gems/ruby-2.1.5@rails4/gems/sqlite3-1.3.9/lib/sqlite3/database.rb:149:in `map'
/usr/local/rvm/gems/ruby-2.1.5@rails4/gems/sqlite3-1.3.9/lib/sqlite3/database.rb:149:in `block in execute'
/usr/local/rvm/gems/ruby-2.1.5@rails4/gems/sqlite3-1.3.9/lib/sqlite3/database.rb:95:in `prepare'
/usr/local/rvm/gems/ruby-2.1.5@rails4/gems/sqlite3-1.3.9/lib/sqlite3/database.rb:134:in `execute'
/usr/local/rvm/gems/ruby-2.1.5@rails4/gems/sqlite3-1.3.9/lib/sqlite3/database.rb:517:in `commit'
/usr/local/rvm/gems/ruby-2.1.5@rails4/gems/activerecord-4.2.0/lib/active_record/connection_adapters/sqlite3_adapter.rb:361:in `block in commit_db_transaction'
/usr/local/rvm/gems/ruby-2.1.5@rails4/gems/activerecord-4.2.0/lib/active_record/connection_adapters/abstract_adapter.rb:466:in `block in log'
/usr/local/rvm/gems/ruby-2.1.5@rails4/gems/activesupport-4.2.0/lib/active_support/notifications/instrumenter.rb:20:in `instrument'
/usr/local/rvm/gems/ruby-2.1.5@rails4/gems/activerecord-4.2.0/lib/active_record/connection_adapters/abstract_adapter.rb:460:in `log'
/usr/local/rvm/gems/ruby-2.1.5@rails4/gems/activerecord-4.2.0/lib/active_record/connection_adapters/sqlite3_adapter.rb:361:in `commit_db_transaction'
/usr/local/rvm/gems/ruby-2.1.5@rails4/gems/activerecord-4.2.0/lib/active_record/connection_adapters/abstract/transaction.rb:155:in `commit'
/usr/local/rvm/gems/ruby-2.1.5@rails4/gems/activerecord-4.2.0/lib/active_record/connection_adapters/abstract/transaction.rb:179:in `commit_transaction'
/usr/local/rvm/gems/ruby-2.1.5@rails4/gems/activerecord-4.2.0/lib/active_record/connection_adapters/abstract/transaction.rb:198:in `within_new_transaction'
/usr/local/rvm/gems/ruby-2.1.5@rails4/gems/activerecord-4.2.0/lib/active_record/connection_adapters/abstract/database_statements.rb:213:in `transaction'
/usr/local/rvm/gems/ruby-2.1.5@rails4/gems/activerecord-4.2.0/lib/active_record/transactions.rb:220:in `transaction'
/usr/local/rvm/gems/ruby-2.1.5@rails4/gems/activerecord-4.2.0/lib/active_record/migration.rb:1041:in `ddl_transaction'
/usr/local/rvm/gems/ruby-2.1.5@rails4/gems/activerecord-4.2.0/lib/active_record/migration.rb:994:in `execute_migration_in_transaction'
/usr/local/rvm/gems/ruby-2.1.5@rails4/gems/activerecord-4.2.0/lib/active_record/migration.rb:956:in `block in migrate'
/usr/local/rvm/gems/ruby-2.1.5@rails4/gems/activerecord-4.2.0/lib/active_record/migration.rb:952:in `each'
/usr/local/rvm/gems/ruby-2.1.5@rails4/gems/activerecord-4.2.0/lib/active_record/migration.rb:952:in `migrate'
/usr/local/rvm/gems/ruby-2.1.5@rails4/gems/activerecord-4.2.0/lib/active_record/migration.rb:820:in `up'
/usr/local/rvm/gems/ruby-2.1.5@rails4/gems/activerecord-4.2.0/lib/active_record/migration.rb:798:in `migrate'
/usr/local/rvm/gems/ruby-2.1.5@rails4/gems/activerecord-4.2.0/lib/active_record/tasks/database_tasks.rb:137:in `migrate'
/usr/local/rvm/gems/ruby-2.1.5@rails4/gems/activerecord-4.2.0/lib/active_record/railties/databases.rake:44:in `block (2 levels) in <top (required)>'
ActiveRecord::StatementInvalid: SQLite3::BusyException: database is locked: commit transaction
/usr/local/rvm/gems/ruby-2.1.5@rails4/gems/sqlite3-1.3.9/lib/sqlite3/statement.rb:108:in `step'
/usr/local/rvm/gems/ruby-2.1.5@rails4/gems/sqlite3-1.3.9/lib/sqlite3/statement.rb:108:in `block in each'
/usr/local/rvm/gems/ruby-2.1.5@rails4/gems/sqlite3-1.3.9/lib/sqlite3/statement.rb:107:in `loop'
/usr/local/rvm/gems/ruby-2.1.5@rails4/gems/sqlite3-1.3.9/lib/sqlite3/statement.rb:107:in `each'
/usr/local/rvm/gems/ruby-2.1.5@rails4/gems/sqlite3-1.3.9/lib/sqlite3/database.rb:149:in `map'
/usr/local/rvm/gems/ruby-2.1.5@rails4/gems/sqlite3-1.3.9/lib/sqlite3/database.rb:149:in `block in execute'
/usr/local/rvm/gems/ruby-2.1.5@rails4/gems/sqlite3-1.3.9/lib/sqlite3/database.rb:95:in `prepare'
/usr/local/rvm/gems/ruby-2.1.5@rails4/gems/sqlite3-1.3.9/lib/sqlite3/database.rb:134:in `execute'
/usr/local/rvm/gems/ruby-2.1.5@rails4/gems/sqlite3-1.3.9/lib/sqlite3/database.rb:517:in `commit'
/usr/local/rvm/gems/ruby-2.1.5@rails4/gems/activerecord-4.2.0/lib/active_record/connection_adapters/sqlite3_adapter.rb:361:in `block in commit_db_transaction'
/usr/local/rvm/gems/ruby-2.1.5@rails4/gems/activerecord-4.2.0/lib/active_record/connection_adapters/abstract_adapter.rb:466:in `block in log'
/usr/local/rvm/gems/ruby-2.1.5@rails4/gems/activesupport-4.2.0/lib/active_support/notifications/instrumenter.rb:20:in `instrument'
/usr/local/rvm/gems/ruby-2.1.5@rails4/gems/activerecord-4.2.0/lib/active_record/connection_adapters/abstract_adapter.rb:460:in `log'
/usr/local/rvm/gems/ruby-2.1.5@rails4/gems/activerecord-4.2.0/lib/active_record/connection_adapters/sqlite3_adapter.rb:361:in `commit_db_transaction'
/usr/local/rvm/gems/ruby-2.1.5@rails4/gems/activerecord-4.2.0/lib/active_record/connection_adapters/abstract/transaction.rb:155:in `commit'
/usr/local/rvm/gems/ruby-2.1.5@rails4/gems/activerecord-4.2.0/lib/active_record/connection_adapters/abstract/transaction.rb:179:in `commit_transaction'
/usr/local/rvm/gems/ruby-2.1.5@rails4/gems/activerecord-4.2.0/lib/active_record/connection_adapters/abstract/transaction.rb:198:in `within_new_transaction'
/usr/local/rvm/gems/ruby-2.1.5@rails4/gems/activerecord-4.2.0/lib/active_record/connection_adapters/abstract/database_statements.rb:213:in `transaction'
/usr/local/rvm/gems/ruby-2.1.5@rails4/gems/activerecord-4.2.0/lib/active_record/transactions.rb:220:in `transaction'
/usr/local/rvm/gems/ruby-2.1.5@rails4/gems/activerecord-4.2.0/lib/active_record/migration.rb:1041:in `ddl_transaction'
/usr/local/rvm/gems/ruby-2.1.5@rails4/gems/activerecord-4.2.0/lib/active_record/migration.rb:994:in `execute_migration_in_transaction'
/usr/local/rvm/gems/ruby-2.1.5@rails4/gems/activerecord-4.2.0/lib/active_record/migration.rb:956:in `block in migrate'
/usr/local/rvm/gems/ruby-2.1.5@rails4/gems/activerecord-4.2.0/lib/active_record/migration.rb:952:in `each'
/usr/local/rvm/gems/ruby-2.1.5@rails4/gems/activerecord-4.2.0/lib/active_record/migration.rb:952:in `migrate'
/usr/local/rvm/gems/ruby-2.1.5@rails4/gems/activerecord-4.2.0/lib/active_record/migration.rb:820:in `up'
/usr/local/rvm/gems/ruby-2.1.5@rails4/gems/activerecord-4.2.0/lib/active_record/migration.rb:798:in `migrate'
/usr/local/rvm/gems/ruby-2.1.5@rails4/gems/activerecord-4.2.0/lib/active_record/tasks/database_tasks.rb:137:in `migrate'
/usr/local/rvm/gems/ruby-2.1.5@rails4/gems/activerecord-4.2.0/lib/active_record/railties/databases.rake:44:in `block (2 levels) in <top (required)>'
SQLite3::BusyException: database is locked
/usr/local/rvm/gems/ruby-2.1.5@rails4/gems/sqlite3-1.3.9/lib/sqlite3/statement.rb:108:in `step'
/usr/local/rvm/gems/ruby-2.1.5@rails4/gems/sqlite3-1.3.9/lib/sqlite3/statement.rb:108:in `block in each'
/usr/local/rvm/gems/ruby-2.1.5@rails4/gems/sqlite3-1.3.9/lib/sqlite3/statement.rb:107:in `loop'
/usr/local/rvm/gems/ruby-2.1.5@rails4/gems/sqlite3-1.3.9/lib/sqlite3/statement.rb:107:in `each'
/usr/local/rvm/gems/ruby-2.1.5@rails4/gems/sqlite3-1.3.9/lib/sqlite3/database.rb:149:in `map'
/usr/local/rvm/gems/ruby-2.1.5@rails4/gems/sqlite3-1.3.9/lib/sqlite3/database.rb:149:in `block in execute'
/usr/local/rvm/gems/ruby-2.1.5@rails4/gems/sqlite3-1.3.9/lib/sqlite3/database.rb:95:in `prepare'
/usr/local/rvm/gems/ruby-2.1.5@rails4/gems/sqlite3-1.3.9/lib/sqlite3/database.rb:134:in `execute'
/usr/local/rvm/gems/ruby-2.1.5@rails4/gems/sqlite3-1.3.9/lib/sqlite3/database.rb:517:in `commit'
/usr/local/rvm/gems/ruby-2.1.5@rails4/gems/activerecord-4.2.0/lib/active_record/connection_adapters/sqlite3_adapter.rb:361:in `block in commit_db_transaction'
/usr/local/rvm/gems/ruby-2.1.5@rails4/gems/activerecord-4.2.0/lib/active_record/connection_adapters/abstract_adapter.rb:466:in `block in log'
/usr/local/rvm/gems/ruby-2.1.5@rails4/gems/activesupport-4.2.0/lib/active_support/notifications/instrumenter.rb:20:in `instrument'
/usr/local/rvm/gems/ruby-2.1.5@rails4/gems/activerecord-4.2.0/lib/active_record/connection_adapters/abstract_adapter.rb:460:in `log'
/usr/local/rvm/gems/ruby-2.1.5@rails4/gems/activerecord-4.2.0/lib/active_record/connection_adapters/sqlite3_adapter.rb:361:in `commit_db_transaction'
/usr/local/rvm/gems/ruby-2.1.5@rails4/gems/activerecord-4.2.0/lib/active_record/connection_adapters/abstract/transaction.rb:155:in `commit'
/usr/local/rvm/gems/ruby-2.1.5@rails4/gems/activerecord-4.2.0/lib/active_record/connection_adapters/abstract/transaction.rb:179:in `commit_transaction'
/usr/local/rvm/gems/ruby-2.1.5@rails4/gems/activerecord-4.2.0/lib/active_record/connection_adapters/abstract/transaction.rb:198:in `within_new_transaction'
/usr/local/rvm/gems/ruby-2.1.5@rails4/gems/activerecord-4.2.0/lib/active_record/connection_adapters/abstract/database_statements.rb:213:in `transaction'
/usr/local/rvm/gems/ruby-2.1.5@rails4/gems/activerecord-4.2.0/lib/active_record/transactions.rb:220:in `transaction'
/usr/local/rvm/gems/ruby-2.1.5@rails4/gems/activerecord-4.2.0/lib/active_record/migration.rb:1041:in `ddl_transaction'
/usr/local/rvm/gems/ruby-2.1.5@rails4/gems/activerecord-4.2.0/lib/active_record/migration.rb:994:in `execute_migration_in_transaction'
/usr/local/rvm/gems/ruby-2.1.5@rails4/gems/activerecord-4.2.0/lib/active_record/migration.rb:956:in `block in migrate'
/usr/local/rvm/gems/ruby-2.1.5@rails4/gems/activerecord-4.2.0/lib/active_record/migration.rb:952:in `each'
/usr/local/rvm/gems/ruby-2.1.5@rails4/gems/activerecord-4.2.0/lib/active_record/migration.rb:952:in `migrate'
/usr/local/rvm/gems/ruby-2.1.5@rails4/gems/activerecord-4.2.0/lib/active_record/migration.rb:820:in `up'
/usr/local/rvm/gems/ruby-2.1.5@rails4/gems/activerecord-4.2.0/lib/active_record/migration.rb:798:in `migrate'
/usr/local/rvm/gems/ruby-2.1.5@rails4/gems/activerecord-4.2.0/lib/active_record/tasks/database_tasks.rb:137:in `migrate'
/usr/local/rvm/gems/ruby-2.1.5@rails4/gems/activerecord-4.2.0/lib/active_record/railties/databases.rake:44:in `block (2 levels) in <top (required)>'
Tasks: TOP => db:migrate
(See full trace by running task with --trace)

This is my Gemfile btw:

source 'https://rubygems.org'

gem 'rails',        '4.2.0'
gem 'bootstrap-sass', '3.2.0.0'
gem 'sass-rails',   '5.0.2'
gem 'uglifier',     '2.5.3'
gem 'coffee-rails', '4.1.0'
gem 'jquery-rails', '4.0.3'
gem 'turbolinks',   '2.3.0'
gem 'jbuilder',     '2.2.3'
gem 'sdoc',         '0.4.0', group: :doc

group :development, :test do
  gem 'sqlite3',     '1.3.9'
  gem 'byebug',      '3.4.0'
  gem 'web-console', '2.0.0.beta3'
  gem 'spring',      '1.1.3'
end

group :test do
  gem 'minitest-reporters', '1.0.5'
  gem 'mini_backtrace', '0.1.3'
  gem 'guard-minitest', '2.3.1'
end

group :production do
  gem 'pg',             '0.17.1'
  gem 'rails_12factor', '0.0.2'
end

How to fix this problem?

Upvotes: 1

Views: 534

Answers (2)

Chitrank Samaiya
Chitrank Samaiya

Reputation: 841

This is related to session problem, check some other session is opened either rails s or rails c. Closing them will fix issue.

Upvotes: 3

Arslan Ali
Arslan Ali

Reputation: 17812

Probably, you are executing your migration while your rails console is open. So you need to execute the following command in your opened rails console program:

ActiveRecord::Base.connection.execute("BEGIN TRANSACTION; END;")

Upvotes: 1

Related Questions