Развертывание Rails Heroku

#ruby-on-rails #heroku #production-environment

#ruby-on-rails #heroku #производственная среда

Вопрос:

Я развернулся с Heroku, и файлы были перенесены нормально, но приложение не работает. Я думаю, что это как-то связано с производственной базой данных, но, похоже, я не могу понять, как это решить. Мое приложение отлично работает в стадии разработки на моем компьютере. Я запустил несколько команд rake db на heroku, таких как

$ heroku rake db: сброс —трассировка

и я получил

рейк прерван! нет такого файла для загрузки — faker /app/lib/tasks/sample_data.rake:1:в require'
/app/lib/tasks/sample_data.rake:1
/app/.bundle/gems/ruby/1.8/gems/railties-3.0.1/lib/rails/engine.rb:131:in
load’ /app/.bundle/gems/ruby/1.8/gems/railties-3.0.1/lib/rails/engine.rb:131:в load_tasks'
/app/.bundle/gems/ruby/1.8/gems/railties-3.0.1/lib/rails/engine.rb:131:in
каждом’ /app/.bundle/gems/ruby/1.8/gems/railties-3.0.1/lib/rails/engine.rb:131:в load_tasks'
/app/.bundle/gems/ruby/1.8/gems/railties-3.0.1/lib/rails/application.rb:141:in
load_tasks’ /app/.bundle/gems/ruby/1.8/gems /railties-3.0.1/lib/rails/application.rb:77: в send'
/app/.bundle/gems/ruby/1.8/gems/railties-3.0.1/lib/rails/application.rb:77:in
method_missing’ /app/Rakefile: 7 /app/.bundle/gems/ruby/1.8/gems/rake-0.8.7/lib/rake.rb:2383:в load'
/app/.bundle/gems/ruby/1.8/gems/rake-0.8.7/lib/rake.rb:2383:in
raw_load_rakefile’ /app/.bundle/gems/ruby/1.8/gems/rake-0.8.7/lib/rake.rb: 2017: в load_rakefile'
/app/.bundle/gems/ruby/1.8/gems/rake-0.8.7/lib/rake.rb:2068:in
standard_exception_handling’ /app/.bundle/gems /ruby/1.8/gems/rake-0.8.7/ библиотека/rake.rb: 2016: в load_rakefile'
/app/.bundle/gems/ruby/1.8/gems/rake-0.8.7/lib/rake.rb:2000:in
запуске’ / app/.bundle/gems/ruby/1.8/gems/rake-0.8.7/библиотека/rake.rb:2068:в standard_exception_handling'
/app/.bundle/gems/ruby/1.8/gems/rake-0.8.7/lib/rake.rb:1998:in
запуске’ / app/.bundle/gems/ruby/1.8/gems/rake-0.8.7/bin/ rake: 31 / usr/ruby1.8.7/bin/ rake: 19: в `загрузке’ / usr/ruby1.8.7/ корзина/грабли:19 (в / приложении)

затем я запустил $ RAILS_ENV=производственная база данных rake:migrate —trace

и получил

** Вызов базы данных: миграция (first_time) ** Вызов среды (first_time) ** Выполнение среды ** Выполнение базы данных: миграция == Создание пользователей: миграция ==================================================== — create_table(:пользователи) -> 0,0012с == Создание пользователей: перенесено (0,0013 с) ===========================================

== AddEmailUniquenessIndex: миграция ======================================== — add_index(:пользователи, : электронная почта, {:уникальный=> true}) -> 0,0008с == AddEmailUniquenessIndex: перенесено (0,0009 с) ===============================

== AddPasswordToUsers: миграция ============================================= — add_column(:пользователи, :зашифрованный пароль, :строка) -> 0,0352с == AddPasswordToUsers: перенесено (0,0353 с) ====================================

== AddSaltToUsers: миграция ================================================= — add_column(:пользователи, :соль, :строка) -> 0,0005с == AddSaltToUsers: перенесено (0,0006 с) ========================================

== AddAdminToUsers: migrating ================================================
— add_column(:users, :admin, :boolean, {:default=>false})
-> 0.0092s
== AddAdminToUsers: migrated (0.0093s) =======================================

== CreateMicroposts: migrating ===============================================
— create_table(:microposts)
-> 0.0009s
== CreateMicroposts: migrated (0.0010s) ======================================

== CreateRelationships: migrating ============================================
— create_table(:relationships)
-> 0.0009s
— add_index(:relationships, :follower_id)
-> 0.0004s
— add_index(:relationships, :followed_id)
-> 0.0004s
== CreateRelationships: migrated (0.0019s) ===================================

== CreateCarts: migrating ====================================================
— create_table(:carts)
-> 0.0014s
== CreateCarts: migrated (0.0015s) ===========================================

== CreateLineItems: migrating ================================================
— create_table(:line_items)
-> 0.0010s
== CreateLineItems: migrated (0.0010s) =======================================

== AddQuantityToLineItem: migrating ==========================================
— add_column(:line_items, :quantity, :integer, {:default=>1})
-> 0.0006s
== AddQuantityToLineItem: migrated (0.0007s) =================================

== CombineItemsInCart: migrating =============================================
== CombineItemsInCart: migrated (0.0134s) ====================================

== CreateOrders: migrating ===================================================
— create_table(:orders)
-> 0.0011s
== CreateOrders: migrated (0.0012s) ==========================================

== AddOrderIdToLineItem: migrating ===========================================
— add_column(:line_items, :order_id, :integer)
-> 0.0005s
== AddOrderIdToLineItem: migrated (0.0005s) ==================================

== AddUsernameToUsers: migrating =============================================
— add_column(:users, :username, :string)
-> 0.0005s
== AddUsernameToUsers: migrated (0.0006s) ====================================

== AddUsernameUniquenessIndex: migrating =====================================
— add_index(:users, :username, {:unique=>true})
-> 0.0012s
== AddUsernameUniquenessIndex: migrated (0.0014s) ============================

== CreateStores: migrating ===================================================
— create_table(:stores)
-> 0.0010s
== CreateStores: migrated (0.0011s) ==========================================

== AddPasswordToStores: migrating ============================================
— add_column(:stores, :encrypted_password, :string)
-> 0.0007s
== AddPasswordToStores: migrated (0.0008s) ===================================

== AddUsernameToStores: migrating ============================================
— add_column(:stores, :username, :string)
-> 0.0006s
== AddUsernameToStores: migrated (0.0007s) ===================================

== AddSaltToStores: migrating ================================================
— add_column(:stores, :salt, :string)
-> 0.0009s
== AddSaltToStores: migrated (0.0010s) =======================================

== AddAdminToStores: migrating ===============================================
— add_column(:stores, :admin, :boolean, {:default=>false})
-> 0.0008s
== AddAdminToStores: migrated (0.0009s) ======================================

== RemoveNameFromOrders: migrating ===========================================
— remove_column(:orders, :name)
-> 0.0062s
== RemoveNameFromOrders: migrated (0.0063s) ==================================

== AddFirstNameToOrders: migrating ===========================================
— add_column(:orders, :first_name, :string)
-> 0.0005s
== AddFirstNameToOrders: migrated (0.0006s) ==================================

== AddLastNameToOrders: migrating ============================================
— add_column(:orders, :last_name, :string)
-> 0.0005s
== AddLastNameToOrders: migrated (0.0006s) ===================================

== AddAddress1ToOrders: migrating ============================================
— add_column(:orders, :address1, :text)
-> 0.0006s
== AddAddress1ToOrders: migrated (0.0007s) ===================================

== AddCardExpiresOnToOrders: migrating =======================================
— add_column(:orders, :card_expires_on, :date)
-> 0.0005s
== AddCardExpiresOnToOrders: migrated (0.0006s) ==============================

== AddBillingidToUsers: migrating ============================================
— add_column(:users, :billing_id, :string)
-> 0.0005s
== AddBillingidToUsers: migrated (0.0006s) ===================================

== Удаление имен из хранилищ: миграция =========================================== — remove_column(:stores, :name) -> 0.0093с == RemoveNameFromStores: перенесено (0.0094с) ==================================

== Удаление содержимого из хранилищ: миграция =========================================== — remove_column(:stores, :salt) -> 0,0079с == Удаление содержимого из хранилищ: перенесено (0,0080 с) ==================================

== Удаление администратора из хранилищ: миграция ========================================== — remove_column(:stores, :admin) -> 0.0065с == Удаление администратора из хранилищ: перенесено (0.0066с) =================================

== Удаление имени пользователя из хранилищ: миграция ======================================= — удаление столбца (: stores, :username) -> 0.0063с == Удаление имени пользователя из хранилищ: перенесено (0.0065с) ==============================

== AddStorenameToStores: миграция =========================================== — add_column(:хранилища, :имя_магазина , :строка) -> 0,0006с == AddStorenameToStores: перенесено (0,0007 с) ==================================

== Удаление зашифрованного пароля из хранилищ: миграция ============================== — удалить столбец (: stores, :encrypted_password) -> 0,0060с == Удалить зашифрованный пароль из хранилищ: перенесено (0,0061 с) =====================

== AddUserIdToStores: миграция ============================================== — add_column(:stores, :user_id, :integer) рейк прерван! Произошла ошибка, эта и все последующие миграции отменены:

SQLite3::SQLException: дублирующее имя столбца: user_id: ИЗМЕНИТЬ ТАБЛИЦУ «stores», ДОБАВИТЬ целое число «user_id»

Ошибка:

== AddUserIdToStores: миграция ============================================== — add_column(:stores, :user_id, :integer) рейк прерван! Произошла ошибка, эта и все последующие миграции отменены:

SQLite3::SQLException: дублирующее имя столбца: user_id: ИЗМЕНИТЬ ТАБЛИЦУ «stores», ДОБАВИТЬ целое число «user_id»

Я не понимаю этого, потому что я не добавлял этот столбец дважды. Я возился с файлами миграции, имеет ли это какое-либо отношение к этому? Спасибо. Я действительно надеюсь, что кто-нибудь сможет помочь с этим.

Ответ №1:

Миграции имеют тенденцию прерываться, когда вы запускаете их достаточное количество подряд. Если вы создаете свою базу данных с нуля, используйте:

 heroku db:schema:load
  

Как правило, я стараюсь создать что-то разумное в своей базе данных разработчиков и просто использовать

 heroku db:push
  

Если вы не знакомы с ним, он скопирует как схему, так и данные из вашей базы данных разработчиков в вашу базу данных приложений на heroku. Любой из этих способов может быть разумным решением вашей проблемы.
Я надеюсь, что это поможет.

Комментарии:

1. Привет, Майк, большое тебе спасибо за помощь! Я установил taps и запустил heroku db: push, и это сработало как по волшебству. На самом деле у меня есть вопрос о миграции, потому что я думаю, что это может быть причиной, по которой у меня возникли проблемы. На самом деле я удалил некоторые файлы из папки миграции и также изменил имена. Как вы думаете, это как-то связано с этим? Я предположил, что база данных копируется, а файлы миграции не имеют значения при развертывании в heroku. Еще раз, большое вам спасибо!

2. Ваш schema.rb действительно является последним словом в вашей схеме db. Предполагается, что миграции переводят вашу базу данных из одного согласованного состояния в другое (и обратно, если необходимо). Теоретически вы можете запустить их с самого начала и получить рабочую базу данных, но обычно при миграциях ссылаются на то, что другие миграции удалили или будут удалять. Возврат назад и редактирование миграций обычно повышает вероятность того, что это произойдет. Я думаю, что это то, что происходило с вами. Сохраните свои миграции, но осознайте их ограничения.