rake 中止的数据库将不会迁移

Posted

技术标签:

【中文标题】rake 中止的数据库将不会迁移【英文标题】:rake aborted database will not migrate 【发布时间】:2015-01-24 07:36:17 【问题描述】:

我分别为“初创公司”创建了模型、视图和控制器(没有脚手架)。我有一个文件 db>migrate>'201..._create_startups.rb',代码如下:

class CreateStartups < ActiveRecord::Migration
  def change
    create_table :startups do |t|
        t.string :name
        t.string :location
        t.string :description

      t.timestamps null: false
    end
  end
end

我运行了“bundle exec rake db:migrate”,得到了以下响应:

== 20141126011749 CreateStartups: migrating ===================================
-- create_table(:startups)
   -> 0.0155s
== 20141126011749 CreateStartups: migrated (0.0159s) ==========================

rake aborted!
StandardError: An error has occurred, this and all later migrations canceled:

wrong number of arguments (1 for 0)/Users/kevinmircovich/.rvm/gems/ruby-2.0.0-p451/gems/activerecord-4.2.0.beta4/lib/active_record/connection_adapters/abstract_adapter.rb:271:in `initialize'

一旦我运行本地服务器并转到浏览器查看我的应用程序,我会收到以下消息:

Migrations are pending. To resolve this issue, run: bin/rake db:migrate RAILS_ENV=development

Extracted source (around line #393):
392 def check_pending!(connection = Base.connection)
393       raise ActiveRecord::PendingMigrationError if ActiveRecord::Migrator.needs_migration?>.>(connection)
394     end
395
396     def load_schema_if_pending!

我运行了“bin/rake db:migrate RAILS_ENV=development”并遇到了与运行“bundle exec rake db:migrate”时相同的错误:

参数数量错误(1 比 0)

【问题讨论】:

我猜你的模型有问题。请检查您的模型中编写的方法和传递给这些方法的参数数量。 阅读this。你刚才所做的是将一个参数传递给t.timestamps 【参考方案1】:

我在运行 rake:db migrate 时收到了类似的错误。为了解决我的问题,我运行 rake:db drop 来删除我的数据库,因为我处于开发模式,没有生产数据库。然后我使用 rake db:create 重新创建数据库,之后我成功运行了 rake db:migrate。

运行 rake db:migrate 时出错 ActiveRecord::PendingMigrationError 迁移待定;运行 'bin/rake db:migrate RAILS_ENV=development' 来解决这个问题。


解决方法:

rake db:drop - 这将清除数据库中的数据 耙分贝:创建 耙分贝:迁移

【讨论】:

【参考方案2】:

在 Rails 迁移中,t.timestamp 宏添加了两列,created_at 和 updated_at。如果存在这些特殊列,则 Active Record 会自动管理它们。

它会在新的记录创建和更新时自动更新。

请从 t.timestamp 中删除 null:false 参数。

class CreateStartups < ActiveRecord::Migration
  def change
    create_table :startups do |t|
        t.string :name
        t.string :location
        t.string :description

      t.timestamps 
    end
  end
end

【讨论】:

我删除了 null:false ,但我仍然遇到同样的问题。还有其他可能吗?【参考方案3】:

时间戳不需要“null: false”:这不是用户的输入:这些是由活动模型本身设置的,因此您可以删除参数。

【讨论】:

我删除了 null:false ,但我仍然遇到同样的问题。还有其他可能吗? @KevinMirc 你能发布你的 config/database.yml 吗?

以上是关于rake 中止的数据库将不会迁移的主要内容,如果未能解决你的问题,请参考以下文章

Rake 正在中止,因为 sqlite db 的未定义方法“inet”

Rake 不会回滚迁移,参数数量错误(1 代表 0)

Can't rake:db migrate - 继续让 'rake 中止!加载错误' [重复]

rake 路由 rake 中止! ArgumentError:必须使用路径和/或选项调用

Rails 4 - AwesomeEotPath 之后 Rake 中止,无效的 CSS

rake db 的 Java EE 替代方案:迁移 [关闭]