【问题标题】:Rake Not Creating Tables耙不创建表
【发布时间】:2016-01-21 03:13:33
【问题描述】:

问题

rake db:migrate 没有在我的 MySQL 数据库中创建表。 (是的,我已经阅读了所有类似的帖子,并实施了他们的建议,请继续阅读。)

代码

数据库.yml:

default: &default
  adapter: mysql2
  encoding: utf8
  pool: 5
  username: root
  password:
  host: localhost
  port: /tmp/mysql.sock

development:
  <<: *default
  database: asreport

来自 gemfile 的行(是的,我也已经安装了 gem):

gem 'mysql2', '~> 0.3.20'

/appfile/db/migrate/create_users.rb(我也尝试过将第二行设为“def up”):

class CreateUsers < ActiveRecord::Migration
  def up
    create_table :users do |t|
      t.string :username
      t.string :password
      t.integer :usertype
      t.string :salt
      t.timestamps
    end
  end
end

在我运行rake db:droprake db:create 刷新后,rake db:migrate --trace 读取(在此输出之后,mysql 中的“显示表”仍然只显示 schema_migrations):

** Invoke db:migrate (first_time)
** Invoke environment (first_time)
** Execute environment
** Invoke db:load_config (first_time)
** Execute db:load_config
** Execute db:migrate
** Invoke db:_dump (first_time)
** Execute db:_dump
** Invoke db:schema:dump (first_time)
** Invoke environment 
** Invoke db:load_config 
** Execute db:schema:dump

我的尝试

首先,我知道我通过 Ruby 连接到 MySQL,因为 db:drop create 确实创建了数据库本身,而不是表。

我已经阅读了我能找到的关于该问题的所有相关堆栈溢出帖子。我已经尝试回滚,将我的数据库直接放到 SQL 上,db:drop/create

我也尝试过删除并重新创建我的迁移脚本。

我已经多次运行 db:migrate(单独运行并在 db:drop/create's, rollback's, resets) 之后运行,但 schema_migrations 始终有 0 个条目,而我的 schema.rb 文件位于 version: 0 上。

【问题讨论】:

  • 运行 Rake db:migrate 时会做什么?喜欢它什么都不做,说点什么,出错了
  • 你知道你连接的用户是否有创建表的权限
  • 我看到你是 root ,
  • 是的,我使用 root 来确保权限不是问题。此外,作为健全性检查,我只是尝试直接在 MySQL 中以 root 身份创建一个表,没有问题。

标签: ruby-on-rails ruby rake migrate dbmigrate


【解决方案1】:

您没有遵循Rails Guides 中列出的命名约定。

具体来说,这个:

2.1 创建独立迁移 迁移作为文件存储在 db/migrate 目录中,每个迁移类一个。的名字 该文件的格式为 YYYYMMDDHHMMSS_create_products.rb,即 说一个标识迁移的 UTC 时间戳,然后是 下划线后跟迁移的名称。的名称 迁移类(CamelCased 版本)应该匹配后面的部分 文件名。例如 20080906120000_create_products.rb 应该 定义类 CreateProducts 和 20080906120001_add_details_to_products.rb 应该定义 将详细信息添加到产品。 Rails 使用这个时间戳来确定哪个 迁移应该以什么顺序运行,所以如果你正在复制一个 从另一个应用程序迁移或自己生成文件,是 知道它在订单中的位置。

继续尝试虚拟迁移以查看文件名约定。

$ bin/rails generate migration AddPartNumberToProducts part_number:string

【讨论】:

  • 宾果游戏!非常感谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-10-24
  • 2011-10-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-13
  • 1970-01-01
相关资源
最近更新 更多