Ошибка при попытке развертывания в heroku (после ror tutorial) PG :: Ошибка: ERROR: столбец "password_digest" отношения "пользователи" уже существует

Поэтому я следую http://www.railstutorial.org/book, а evrything работает нормально локально (работает sqlight3).

При попытке попробовать получить следующую ошибку

heroku run rake db: migrate

Вот как выглядит сообщение об ошибке

Запуск rake db:migrate подключению к терминалу... вверх, запуск.4049 Перенос в AddPasswordDigestToUsers (20140817014655) == 20140817014655 AddPasswordDigestToUsers: migifying ======================= === - add_column (: users,: password_digest,: string) PG :: Ошибка: ERROR: столбец "password_digest" отношения "пользователи" уже существуют: ALTER TABLE "users" ADD COLUMN "password_digest" различающийся (255) грабли прерваны! StandardError: Произошла ошибка, эта и все последующие миграции были отменены:

PG :: Ошибка: ERROR: столбец "password_digest" отношения "пользователи" уже существует: ALTER TABLE "пользователи" ADD COLUMN "password_digest" различающийся (255)/app/vendor/bundle/ruby/2.0.0/gems/activerecord -4.0.8/lib/active_record/connection_adapters/postgresql/database_statements.rb: 128: in exec'/app/vendor/bundle/ruby/2.0.0/gems/activerecord-4.0.8/lib/active_record/connection_adapters/postgresql/database_statements.rb:128:in block in execute '/app/vendor/bundle/ruby/2.0.0/gems/activerecord-4.0.8/lib/active_record/connection_adapters/abstract_adapter.rb:442:в block in log'/app/vendor/bundle/ruby/2.0.0/gems/activesupport-4.0.8/lib/active_support/notifications/instrumenter.rb:20:in instrument '/app/vendor/bundle/ruby/2.0.0/gems/activerecord-4.0.8/lib/active_record/connection_adapters/abstract_adapter.rb:437:в log'/app/vendor/bundle/ruby/2.0.0/gems/activerecord-4.0.8/lib/active_record/connection_adapters/postgresql/database_statements.rb:127:in execute '/app/vendor/bundle/ruby/2.0.0/gems/act iverecord-4.0.8/lib/active_record/connection_adapters/abstract/schema_statements.rb: 360: in add_column'/app/vendor/bundle/ruby/2.0.0/gems/activerecord-4.0.8/lib/active_record/connection_adapters/postgresql/schema_statements.rb:395:in add_column '/app/vendor/bundle/ruby/2.0.0/gems/activerecord-4.0.8/lib/active_record/migration.rb:629:в block in method_missing'/app/vendor/bundle/ruby/2.0.0/gems/activerecord-4.0.8/lib/active_record/migration.rb:601:in блоке say_with_time '/app/vendor/bundle/ruby/2.0.0/gems/activerecord- 4.0.8/lib/active_record/migration.rb: 601: in say_with_time'/app/vendor/bundle/ruby/2.0.0/gems/activerecord-4.0.8/lib/active_record/migration.rb:621:in method_missing '/app/db/migrate/20140817014655_add_password_digest_to_users.rb:3:in change'/app/vendor/bundle/ruby/2.0.0/gems/activerecord-4.0.8/lib/active_record/migration.rb:575:in exec_migration '/app/vendor/bundle/ruby/2.0.0/gems/activerecord-4.0.8/lib/active_record/migration.rb:559:в block (2 levels) in migrate'/app/vendor/bundle/ruby/2.0.0/gems/activerecord-4.0.8/lib/active_record/migration.rb:558:in block (2 levels) in migrate'/app/vendor/bundle/ruby/2.0.0/gems/activerecord-4.0.8/lib/active_record/migration.rb:558:in блоке в migrate '/app/vendor/bundle/ruby/2.0.0/gems/activerecord-4.0.8/lib/active_record/connection_adapters/abstract/connection_pool.rb: 294: in with_connection'/app/vendor/bundle/ruby/2.0.0/gems/activerecord-4.0.8/lib/active_record/migration.rb:557:in migrate '/app/vendor/bundle/ruby/2.0.0/gems/activerecord-4.0.8/lib/active_record/migration.rb:713:in migrate'/app/vendor/bundle/ruby/2.0.0/gems/activerecord-4.0.8/lib/active_record/migration.rb:963:in блоке в execute_migration_in_transaction '/app/vendor/bundle/ruby/2.0.0/gems/activerecord-4.0.8/lib/active_record/migration.rb: 1009: в block in ddl_transaction'/app/vendor/bundle/ruby/2.0.0/gems/activerecord-4.0.8/lib/active_record/connection_adapters/abstract/database_statements.rb:203:in block в транзакции '/app/vendor/bundle/ruby/2.0.0/gems/activerecord-4.0.8/lib/active_record/connection_adapters/abstract/database_statements.rb:211:in within_new_transaction'/app/vendor/bundle/ruby/2.0.0/gems/activerecord-4.0.8/lib/active_record/connection_adapters/abstract/database_statements.rb:203:in within_new_transaction'/app/vendor/bundle/ruby/2.0.0/gems/activerecord-4.0.8/lib/active_record/connection_adapters/abstract/database_statements.rb:203:in transaction'/app/vendor/bundle/ruby/2.0.0/gems/activerecord-4.0.8/lib/active_record/transaction.rb: 209: в transaction'/app/vendor/bundle/ruby/2.0.0/gems/activerecord-4.0.8/lib/active_record/migration.rb:1009:in ddl_transaction '/app/vendor/bundle/ruby/2.0.0/gems/activerecord-4.0.8/lib/active_record/migration.rb:962:in execute_migration_in_transaction'/app/vendor/bundle/ruby/2.0.0/gems/activerecord-4.0.8/lib/active_record/migration.rb:924:in block in migrate '/app/vendor/bundle/ruby/2.0.0/gems/activerecord-4.0.8/lib/active_record/migration.rb:920:в each'/app/vendor/bundle/ruby/2.0.0/gems/activerecord-4.0.8/lib/active_record/migration.rb:920:in migrate'/app/vendor/bundle/ruby/2.0.0/gems/activerecord-4.0.8/lib/active_record/migration.rb:768:in up'/app/vendor/bundle/ruby/2.0.0/gems/activerecord-4.0.8/lib/active_record/migration.rb:746:in up'/app/vendor/bundle/ruby/2.0.0/gems/activerecord-4.0.8/lib/active_record/migration.rb:746:in migrate '/app/vendor/bundle/ruby/2.0.0/gems/activerecord-4.0.8/lib/active_record/railties/databases.rake:42:in' block (2 уровня) в разделе "Задачи: TOP => db: migrate (см. полный след, выполнив задачу с помощью --trace)

Я уже пробовал heroku pg: перезагрузите DATABASE_URL, а затем повторите попытку. Также попытался добавить /spec,/lib,/script,/features,/cucumber.yml в.slugignore

Вот как выглядит моя схема:

ActiveRecord::Schema.define(version: 20140818041701) do

  create_table "users", force: true do |t|
    t.string   "name"
    t.string   "email"
    t.datetime "created_at"
    t.datetime "updated_at"
    t.string   "password_digest"
    t.string   "remember_token"
    t.boolean  "admin",           default: false
  end

  add_index "users", ["email"], name: "index_users_on_email", unique: true
  add_index "users", ["remember_token"], name: "index_users_on_remember_token"

end

И это моя миграция паролей выглядит так:

class AddPasswordDigestToUsers < ActiveRecord::Migration
  def change
    add_column :users, :password_digest, :string
  end
end
+1
источник поделиться
2 ответа

У вас уже есть столбец password_digest в вашей таблице и с миграцией AddPasswordDigestToUsers вы пытаетесь создать еще один, почему он создает проблему. Удалите миграцию AddPasswordDigestToUsers и попробуйте запустить rake db:migrate AddPasswordDigestToUsers снова. Sqlite3 не вызывает ошибок в таких случаях. если вы пишете intege вместо integer в процессе миграции, это не вызовет ошибки, если вы используете sqlite.

0
источник

Если вы просто удалите файл миграции дайджеста паролей, он решит краткосрочную проблему развертывания в heroku, но тогда он не будет доступен для сотрудников, чтобы вытащить и настроить локальную базу данных. Они столкнутся с проблемами и могут создать другой файл миграции, который создает ту же проблему.

Я не уверен, что это лучшее решение, но для меня это пока работает:

class AddPasswordDigestToUsers < ActiveRecord::Migration
  def change
    if Rails.env == "production"
    else
      add_column :users, :password_digest, :string   
    end
  end
end
0
источник

Посмотрите другие вопросы по меткам или Задайте вопрос