[英]can't run migrations. Table doesn't exists
我正在尝试在新工作站中设置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'
我不知道我做错了什么?
/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)>'
在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
您的迁移似乎处于不一致的状态,这很好。 您应该只运行rake db:setup
来创建数据库并从db/schema.rb
恢复数据库的实际权威状态,而不是rake db:create
和rake db:migrate
。
您不应该能够克隆任何给定的repo并运行rake db:migrate
以完成所有已存在的数据库版本。 这是Rails的常见误解。 db/schema.rb
包含数据库的最新状态, 这是唯一的数据库模式的权威来源。 你应该只加载该文件。
有时在/config/routes.rb文件中有路由要求存在DB表(在我的情况下是Devise和ActiveAdmin路由)。 只需在运行迁移之前将其注释掉,然后再恢复。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.