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”
Can't rake:db migrate - 继续让 'rake 中止!加载错误' [重复]
rake 路由 rake 中止! ArgumentError:必须使用路径和/或选项调用