Подтвердить что ты не робот

Rails rake db: migrate не влияет

Сегодня я сделал новое приложение Rails 3, добавил простую миграцию, и по какой-то причине ничего не происходит, когда я делаю рейк db: migrate. Он просто приостанавливается на несколько секунд, затем возвращается в командную строку без ошибок или чего-то еще. Schema.rb и база данных остаются пустыми.

Любые идеи, что может быть? Я сделал много приложений и никогда не сталкивался с этой проблемой. Все это тоже стандартная настройка.

4b9b3361

Ответ 1

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

Каждая миграция создает запись в таблице schema_migrations с столбцом version, соответствующим номеру идентификатора. Если вы хотите принудительно перенастроить миграцию, вы можете вернуться к ней и повторить попытку. Например, если у вас есть 20100421175455_create_things.rb, то вы повторно запустите его, используя:

rake db:migrate:redo VERSION=20100421175455

Общей ситуацией является то, что ваша миграция не запускалась в первую очередь, что она генерировала исключение, например, и все же Rails все еще считает ее завершенной. Чтобы принудительно перезапустить миграцию, удалите соответствующую запись из таблицы schema_migrations и снова запустите rake db:migrate.

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

class CreateThings < ActiveRecord::Migration
  def self.up
    # ... (migration) ...

  rescue
    # If an exception occurs, back out of this migration, but ignore any
    # exceptions generated there. Do the best you can.
    self.down rescue nil

    # Re-raise this exception for diagnostic purposes.
    raise
  end
end

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

Ответ 2

Вызов spring stop может решить ваши проблемы.

Ответ 3

Ну, я узнал, что вызвало мою проблему. Я использую жемчужину slim_scrooge и комментируя ее, все идет нормально. Не знаю, почему, хотя...

Ответ 4

Я столкнулся с той же проблемой. Я сделал своего рода короткий взлом, который помог мне. Я отправляю его на всякий случай, если кто-то хочет короткое и сладкое решение. Я согласен с тем, что говорит Тадман.

"в системе уже создается впечатление, что все миграции вы уже определили"

Я сделал это, чтобы изменить имя файла миграции в папке /app_folder/db/migrate. Я думаю, что числовая часть в имени файла миграции ruby ​​- это время, в которое был создан файл.

Вы можете добавить say 1 к имени файла, каждый раз, когда вы хотите повторно запустить миграцию. После изменения имени drop/delete таблицы (я использовал инструмент командной строки mysql для удаления), а затем запустите rake db: migrate, и миграция должна быть выполнена.

Ответ 5

Сегодня я столкнулся с аналогичной проблемой при переносе плагина для Redmine с помощью

rake redmine:plugins:migrate RAILS_ENV=production NAME=plugin_name

где plugin_name - фактически имя плагина, определенное в init.rb плагина.

Я боролся в течение 4 часов и, наконец, понял, что имя моего плагина не совпадает с именем плагина (обратите внимание на redmine_ prefix):

~/redmine/plugins/redmine_plugin_name

Итак, убедитесь, что ваш плагин находится в папке с именем после имени плагина. Я считаю, что это относится и к другим приложениям rails.