Rails rake db:migrate没有任何作用



我今天制作了一个新的Rails3应用程序,添加了一个简单的迁移,由于某种原因,当我执行rakedb:migrate时什么都没有发生。它只是暂停几秒钟,然后返回到命令提示符,没有任何错误或任何内容。Schema.rb和数据库保持为空。

有什么想法吗?我制作了很多应用程序,但从未遇到过这个问题。一切都是完全标准的设置。

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

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

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

我也遇到了同样的问题。我做了一个简短的破解帮助了我。我发布它只是为了防止有人想要一个简短而甜蜜的解决方案。我同意Tadman所说的

"系统已经认为所有的迁移您定义的已经运行">

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

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

调用spring stop可能会解决您的问题。

好吧,我发现了问题的原因。我正在使用slim_scoroge宝石,并对其进行注释可以使一切正常进行。不知道为什么。。。

我今天在使用为Redmine迁移插件时遇到了类似的问题

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

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

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

~/redmine/plugins/redmine_plugin_name

所以,请确保您的插件被放置在以插件名称命名的文件夹中。我相信它也适用于其他rails应用程序。

相关内容

  • 没有找到相关文章

最新更新