Что может привести к зависанию этой миграции? - PullRequest
3 голосов
/ 19 июня 2010

Я пытаюсь обновить старое приложение Rails 1.2.6 до 2.3.8, и я сталкиваюсь с некоторыми трудностями при миграции.А именно, если у меня есть что-то вроде ModelName.create (: foo => "bar") в миграции, миграция не завершится.Это не попадает в бесконечный цикл или что-то еще.Он просто отказывается завершить эту миграцию.

Вот пример кода.

Это работает:

class CreateNewsArticles < ActiveRecord::Migration
  def self.up
    create_table :news_articles, :force => true do |t|
      t.string  "name"
      t.string  "image"
      t.text    "body"
      t.boolean "featured", :default => "0"
      t.integer "position"
      t.timestamps
    end
    # Section.create(:name => 'News Articles', :controller => 'news_articles', :description => 'Add, edit, and delete news articles.')
  end

  def self.down
    drop_table :news_articles
    Section.find_by_name('News Articles').destroy
  end
end

Раскомментирование Section.create (...) означает миграциюникогда не завершается.

Вот вывод от rake db: migrate --trace:

** Invoke db:migrate (first_time)
** Invoke environment (first_time)
** Execute environment
** Execute db:migrate
==  CreateNewsArticles: migrating =============================================
-- create_table(:news_articles, {:force=>true})
   -> 0.0531s

И после комментирования Section.create

** Invoke db:migrate (first_time)
** Invoke environment (first_time)
** Execute environment
** Execute db:migrate
==  CreateNewsArticles: migrating =============================================
-- create_table(:news_articles, {:force=>true})
   -> 0.0479s
==  CreateNewsArticles: migrated (0.0481s) ====================================

** Invoke db:schema:dump (first_time)
** Invoke environment 
** Execute db:schema:dump

Я пробовал это надругой компьютер, и он работает.Та же версия граблей, та же версия ruby ​​и rails заморожены.

rake - ВЕРСИЯ: rake, version 0.8.7, ruby ​​-v: ruby 1.8.6 (2010-02-05 patchlevel 399) [i686-darwin10.3.0], rails -v: Rails 2.3.8

У кого-нибудь есть идеи?

Ответы [ 4 ]

9 голосов
/ 13 августа 2011

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

$ rails console --sandbox

в другом процессе.Выход из процесса консоли позволяет выполнить миграцию.

2 голосов
/ 06 мая 2014

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

Выполнить:

heroku pg:ps

Для просмотра процессов базы данных.Вам придется убить процесс простоя:

heroku pg:kill 913 --force -a

(913 - это идентификатор процесса простоя -> измените его в соответствии с вашими потребностями

0 голосов
/ 19 июня 2010

Вы также можете попытаться определить модель сечения стержней в миграции.

0 голосов
/ 19 июня 2010

Видимо, виновным было использование ruby ​​1.8.6-p399. Переход на 1.8.6-p369 решил это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...