相关疑难解决方法(0)

FactoryGirl搞砸了rake db:migrate进程

我在Ruby on Rails 3中使用Rspec(2.11.0)和FactoryGirl(4.0.0)进行TDD/BDD.我有一个类别模型的工厂:

FactoryGirl.define "Category" do
  factory :category do
    name "Foo"
  end
end
Run Code Online (Sandbox Code Playgroud)

如果我删除,创建然后在测试环境中迁移数据库我收到此错误:

rake aborted!
Could not find table 'categories'
Run Code Online (Sandbox Code Playgroud)

出现此问题的原因是FactoryGirl期望表已经存在(出于某些奇怪的原因).如果我从我的rails应用程序中删除spec文件夹并且这样做db:migrate,它可以工作.此外,如果我factory-girl-rails从我的标记,Gemfile因为:require => false它也有效(然后我必须发表评论,以便运行rspec).

我在这里找到了一些关于这个问题的信息:https://github.com/thoughtbot/factory_girl/issues/88

我有什么不对劲吗?如何在db:migration任务中"通过"FactoryGirl阶段?

bdd rake rspec ruby-on-rails factory-bot

30
推荐指数
2
解决办法
8570
查看次数

迁移到创建表引发Mysql2 ::错误:表不存在

我用以下内容编写了一个迁移:

class CreateTableSomeTable < ActiveRecord::Migration[5.1]
  def change
    create_table :some_tables do |t|
      t.references :user, foreign_key: true
      t.references :author, references: :user, foreign_key: true
      t.text :summary
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

这是一个创建数据库表的基本迁移.但是:当我运行rails db:migrate一个非常奇怪的错误消息时中止迁移:

Mysql2 ::错误:表'my_database.some_tables'不存在:显示来自'some_tables'的完整字段

好像错误是说它无法创建表,因为表确实存在,这没有意义.

我看过并试过的事情:

  • 回顾了database.yml,看起来很好.什么都没有改变,我最近运行其他迁移就好了(虽然没有创建数据库表的迁移)
  • 跑来bundle确保所有的宝石都安装好了
  • 删除schema.rb文件,用另一个副本中的数据重新创建数据库,然后我跑去rake db:schema:dump重新创建schema.rb文件.我试图再次运行迁移,但仍然遇到了同样的错误.

我使用rails 5.1.1以及mysql2 0.4.6

有关如何让迁移运行的任何提示?

ruby mysql ruby-on-rails mysql2

18
推荐指数
3
解决办法
5091
查看次数

标签 统计

ruby-on-rails ×2

bdd ×1

factory-bot ×1

mysql ×1

mysql2 ×1

rake ×1

rspec ×1

ruby ×1