【问题标题】:rake db:migrate returns with errorrake db:migrate 返回错误
【发布时间】:2015-08-31 16:18:45
【问题描述】:

我运行了 rake db:migrate 并在终端中遇到了这个错误

SQLite3::SQLException: no such table: admin_users: ALTER TABLE "admin_users" ADD "username" varchar(25)/Users/IsaiahxD/.rvm/gems/ruby-2.2.1/gems/sqlite3-1.3.10/lib/sqlite3/database.rb:91:in `initialize'
/Users/IsaiahxD/.rvm/gems/ruby-2.2.1/gems/sqlite3-1.3.10/lib/sqlite3/database.rb:91:in `new'
/Users/IsaiahxD/.rvm/gems/ruby-2.2.1/gems/sqlite3-1.3.10/lib/sqlite3/database.rb:91:in `prepare'
/Users/IsaiahxD/.rvm/gems/ruby-2.2.1/gems/sqlite3-1.3.10/lib/sqlite3/database.rb:134:in `execute'
/Users/IsaiahxD/.rvm/gems/ruby-2.2.1/gems/activerecord-4.2.3/lib/active_record/connection_adapters/sqlite3_adapter.rb:329:in `block in execute'
/Users/IsaiahxD/.rvm/gems/ruby-2.2.1/gems/activerecord-4.2.3/lib/active_record/connection_adapters/abstract_adapter.rb:473:in `block in log'

我查看了我的 alter_user.rb 文件 class AlterUsers < ActiveRecord::Migration

这是文件 20150825065823_alter_users.rb

def up
  rename_table("users", "admin_users.broken")
  add_column("admin_users", "username", :string, :limit => 25, :after => "email" )
  change_column("admin_users", "email", :string, :limit => 100)
  rename_column("admin_users", "broken", "hashed_password")
  puts "*** Adding an index is next ***"
  add_index("admin_users", "username")
end

def down
  remove_index("admin_users", "username")
  rename_column("admin_users", "hashed_password", "password")
  change_column("admin_users", "email", :string, :default => "" , :null => false)
  remove_column("admin_users", "username")
  rename_table("admin_users", "users")
end

【问题讨论】:

    标签: ruby ruby-on-rails-3 ruby-on-rails-4 ruby-on-rails-3.2 syntax-error


    【解决方案1】:

    在您的 #up 方法中,您正在向 admin_users 添加列,但您尚未定义该表。

    代替:

    rename_table("users", "admin_users.broken")

    尝试:

    rename_table("users", "admin_users")

    【讨论】:

    • 它仍然说 StandardError: An error has occurred, this and all later migrations cancelled:No such column: admin_users.broken/Users/IsaiahxD/.rvm/gems/ruby-2.2.1/gems/ activerecord-4.2.3/lib/active_record/connection_adapters/abstract_adapter.rb:490:in column_for' /Users/IsaiahxD/.rvm/gems/ruby-2.2.1/gems/activerecord-4.2.3/lib/active_record/connection_adapters/sqlite3_adapter.rb:497:in rename_column' /Users/IsaiahxD/.rvm/gems/ruby-2.2.1/gems/activerecord-4.2.3/lib/ active_record/migration.rb:661:in `block in method_missing'
    • 这是因为您已经使用 admin_users.broken 作为表名运行了迁移。将代码替换回rename_table("users", "admin_users.broken"),然后执行:rake db:rollback,然后将代码替换为:rename_table("users", "admin_users"),现在进行迁移。
    猜你喜欢
    • 2018-10-06
    • 2017-02-17
    • 1970-01-01
    • 2017-03-01
    • 2018-02-05
    • 2014-07-16
    • 2013-09-03
    • 2011-10-07
    • 2011-07-05
    相关资源
    最近更新 更多