【发布时间】:2025-12-21 22:35:12
【问题描述】:
我正在尝试将旧的 1.2.6 Rails 应用程序升级到 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
我已经在另一台计算机上尝试过,它可以工作。相同版本的 rake、相同版本的 ruby 和 rails 被冻结。
rake --VERSION: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
有人有什么想法吗?
【问题讨论】:
标签: ruby-on-rails