无法运行迁移.表不存在

Sug*_*nya 3 ruby-on-rails database-migration setup-project

我正在尝试在新工作站中设置Rails应用程序.但是当我尝试运行迁移时,它会抛出错误.

**rake aborted!
ActiveRecord::StatementInvalid: Mysql2::Error: Table 'test_rb.roles' doesn't exist: SHOW FULL FIELDS FROM `roles`**
/home/suganya/.rvm/gems/ruby-2.1.1@rb/gems/activerecord-3.2.21/lib/active_record        /connection_adapters/abstract_mysql_adapter.rb:245:in `query'
/home/suganya/.rvm/gems/ruby-2.1.1@rb/gems/activerecord-3.2.21/lib/active_record/connection_adapters/abstract_mysql_adapter.rb:245:in `block in execute'
 /home/suganya/.rvm/gems/ruby-2.1.1@rb/gems/activerecord-3.2.21/lib/active_record/connection_adapters/abstract_adapter.rb:280:in `block in log'
/home/suganya/.rvm/gems/ruby-2.1.1@rb/gems/activesupport-3.2.21/lib/active_support/notifications/instrumenter.rb:20:in `instrument'
 /home/suganya/.rvm/gems/ruby-2.1.1@rb/gems/activerecord-3.2.21/lib/active_record/connection_adapters/abstract_adapter.rb:275:in `log'
/home/suganya/.rvm/gems/ruby-2.1.1@rb/gems/activerecord-3.2.21/lib/active_record/connection_adapters/abstract_mysql_adapter.rb:245:in `execute'
/home/suganya/.rvm/gems/ruby-2.1.1@rb/gems/activerecord-3.2.21/lib/active_record/connection_adapters/mysql2_adapter.rb:213:in `execute'
/home/suganya/.rvm/gems/ruby-2.1.1@rb/gems/activerecord-3.2.21/lib/active_record/connection_adapters/abstract_mysql_adapter.rb:259:in `execute_and_free'
 /home/suganya/.rvm/gems/ruby-2.1.1@rb/gems/activerecord-3.2.21/lib/active_record/connection_adapters/abstract_mysql_adapter.rb:426:in `columns'
 /home/suganya/.rvm/gems/ruby-2.1.1@rb/gems/activerecord-3.2.21/lib/active_record/connection_adapters/schema_cache.rb:12:in `block in initialize'
Run Code Online (Sandbox Code Playgroud)

我不知道我做错了什么?

 /home/suganya/academics/reportbee/app/models/constant_cache.rb:4:in `caches_constants'
  /home/suganya/academics/reportbee/app/models/role.rb:14:in `<class:Role>'
 /home/suganya/academics/reportbee/app/models/role.rb:1:in `<top (required)>'
Run Code Online (Sandbox Code Playgroud)

在Role.rb中

 class Role < ActiveRecord::Base
     has_many :allotments
     has_many :users, :through => :allotments

      serialize :possible_display_names, Array

     validates :name, presence: true, uniqueness: true

   scope :accessible, -> { where( :accessible => true ) }

 CLASS_TEACHER_DISPLAY_NAME = 'Class Teacher'

   extend ConstantCache::ClassMethods
   caches_constants :name, :converter => :titleize 
end
Run Code Online (Sandbox Code Playgroud)

mea*_*gar 7

您的迁移似乎处于不一致的状态,这很好.而不是rake db:createrake db:migrate,你应该只是运行rake db:setup来创建数据库并从中恢复数据库的实际权威状态db/schema.rb.

您不应该能够克隆任何给定的repo并运行rake db:migrate以完成所有已存在的数据库版本.这是Rails的常见误解. db/schema.rb包含数据库的最新状态,是数据库模式的唯一权威来源.你应该只加载该文件.

  • 这是很好的信息,但我在 db:setup 中遇到了与 db:migrate 相同的错误。 (3认同)