Rails rake db:migrate没有任何影响

时间:2011-04-08 16:43:22

标签: ruby-on-rails ruby-on-rails-3 activerecord rake rails-migrations

我今天制作了一个新的Rails 3应用程序,添加了一个简单的迁移,并且由于某些原因,当我执行rake db:migrate时没有任何反应。它只是暂停几秒钟,然后返回到命令提示符,没有任何错误或任何错误。 Schema.rb和数据库保持空白。

任何想法可能会发生什么?我做了很多应用程序,从来没有遇到过这个问题。一切都是完全标准的设置。

5 个答案:

答案 0 :(得分:63)

您的迁移无法运行的原因有几个,但最常见的是系统已经认为您定义的所有迁移都已经运行。

每次迁移都会在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

如果迁移中出现错误,您将在控制台上看到异常。由于迁移已自动回滚,因此您应该能够一次又一次地运行它,直到您做对了。

答案 1 :(得分:1)

致电spring stop可能会解决您的问题。

答案 2 :(得分:0)

好吧,我发现了导致我问题的原因。我正在使用slim_scrooge宝石并对其进行评论使一切正常进行。不知道为什么......

答案 3 :(得分:0)

我遇到了同样的问题。我做了一个帮助我的短暂黑客。我发布它以防万一有人想要一个简短而甜蜜的解决方案。我同意塔德曼所说的话

  

&#34;系统已经存在所有迁移的印象   您已定义的已经运行&#34;

我所做的是在 / app_folder / db / migrate 文件夹中更改迁移文件的名称。我认为ruby migrate文件名称中的数字部分是创建文件的时间。

每次要重新运行迁移时,都可以在文件名中添加say 1。更改名称后删除/删除表(我使用mysql命令行工具删除),然后运行 rake db:migrate ,并且应该完成迁移。

答案 4 :(得分:0)

我在使用

迁移Redmine的插件时遇到了类似的问题
rake redmine:plugins:migrate RAILS_ENV=production NAME=plugin_name

其中plugin_name实际上是插件的init.rb中定义的插件名称。

我挣扎了4个小时,终于发现我的插件目录名与插件名不同(注意redmine_前缀):

~/redmine/plugins/redmine_plugin_name

因此,请确保您的插件位于以插件名称命名的文件夹中。我相信它也适用于其他rails应用程序。