Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 运行Ruby on Rails数据库迁移时出错_Ruby On Rails_Ruby_Ruby On Rails 3_Rake_Dbmigrate - Fatal编程技术网

Ruby on rails 运行Ruby on Rails数据库迁移时出错

Ruby on rails 运行Ruby on Rails数据库迁移时出错,ruby-on-rails,ruby,ruby-on-rails-3,rake,dbmigrate,Ruby On Rails,Ruby,Ruby On Rails 3,Rake,Dbmigrate,我正在Ruby on Rails应用程序中安装Desive gem for authentication,并以如下方式运行数据库迁移: rake db:migrate class CreateUsers < ActiveRecord::Migration def self.up create_table :users do |t| t.timestamps end end def self.down drop_table :users

我正在Ruby on Rails应用程序中安装Desive gem for authentication,并以如下方式运行数据库迁移:

rake db:migrate
class CreateUsers < ActiveRecord::Migration
  def self.up
    create_table :users do |t|

      t.timestamps
    end
  end

  def self.down
    drop_table :users
  end
end
得到了这个错误:

undefined method `reference' for #<ActiveRecord::ConnectionAdapters::TableDefinition:0x9322248>
问题可能是数据库中的列不匹配,以及auth包认为users表应该是什么样子。在哪里可以看到auth包对列的看法?在哪里可以找到CREATETABLE命令用于我拥有的users表。它最初是用scaffold命令创建的,它在我的系统中放置了一大堆多余的无用的东西

我的db/migrate/users/create_users文件如下所示:

rake db:migrate
class CreateUsers < ActiveRecord::Migration
  def self.up
    create_table :users do |t|

      t.timestamps
    end
  end

  def self.down
    drop_table :users
  end
end
我不确定在运行migrate命令之后,这种不一致性是如何存在的。如果不是上面我发布的文件,它从哪里得到指示


谢谢

我建议您使用--trace选项运行db:migrate命令:

rake db:migrate --trace
例如,我故意在我的Desive迁移中添加了一个语法错误,这是我得到的输出的一个片段。如您所见,--trace选项应该指向确切的错误(迁移文件+行#)

的未定义方法“strin”#
/用户/#####/.rvm/gems/ruby-1.9.2-p136@rails3/gems/activerecord-3.0.5/lib/active\u record/connection\u adapters/abstract/schema\u definitions.rb:326:in'method\u missing'
/Users/########/rails/$$$$$$$/db/migrate/20101031153010(设计)(创建)用户。rb:13:in`block in up'
/用户/#####/.rvm/gems/ruby-1.9.2-p136@rails3/gems/activerecord-3.0.5/lib/active\u record/connection\u adapters/abstract/schema\u语句。rb:157:在“创建表”中
...

请注意,迁移文件位于
db/migrate
目录下。因此,鉴于上述错误,我需要打开db/migrate/20101031153010_designe_create_users.rb迁移文件,并修复第13行的错误。

生成新模型后,我遇到了类似错误:

rails generate model Status open:boolean available:integer station:reference
问题是我在生成模型时使用了“reference”而不是“references”。此命令创建以下迁移:

class CreateStatuses < ActiveRecord::Migration
    def change
        create_table :statuses do |t|
            t.boolean :open
            t.integer :available
            t.reference :station
        end
    end
end
class CreateStatuses
方法“reference”未定义,因此错误。就我而言,迁移应该是:

class CreateStatuses < ActiveRecord::Migration
    def change
        create_table :statuses do |t|
            t.boolean :open
            t.integer :available
            t.references :station
        end
    end
end
class CreateStatuses
检查迁移文件“migrate/201010311530010\u designe\u create\u users.rb”。
您可能在代码中犯了错误或输入错误。

我的问题是我使用了:

za$ rails g scaffold team name:string team_id:integer:uniq  references:vendor
而不是:

za$ rails g scaffold team name:string team_id:integer:uniq  vendor:references
刚刚更改的
vendor:references到vendor:references


愚蠢的错误,我知道

你能粘贴你未迁移的迁移文件的内容吗?@twmills事实上,这是问题的一部分-我不完全确定如何获取这些文件lol…它们通常在哪里?你在这之前运行过迁移吗?@feelnoway我真的不明白为什么我的db/migrate目录中只有4个文件,我的MySQL数据库中有20个表。我曾经使用过scaffold命令,但我真的很想知道是什么把这些额外的表放在了那里。有没有想过为什么会发生这种情况?@feelnoway我编辑了我的问题,以显示迁移脚本和创建的db表。如果不知道环境的历史,很难说出这些表是什么以及它们来自哪里。您是否考虑过清理数据库,然后再次运行迁移?您可能希望尝试使用
rake db:migrate:reset
命令,但请记住,这将清除当前存储在数据库中的数据,因此请先确定是否可以使用该命令。如果这不起作用,我会考虑手动删除数据库中的所有表,或者简单地重新创建一个数据库。我只是在等待在ruby世界中学习正确的方法。我习惯于存储单独的文件来重新创建表。重置命令是否用于清除旧表并创建新表?确实,用户表与用户迁移不一致。我怀疑users表过去可能用于另一个项目。我建议您只需重新创建数据库或清除所有表,然后再次运行迁移。另外,如果您已经有了一个用户模型,并且正在尝试集成Desive,那么我建议您看看这个,它将告诉您需要如何更新您的用户迁移以使其与Desive一起工作。
za$ rails g scaffold team name:string team_id:integer:uniq  vendor:references