耙不创建表

时间:2015-10-21 23:22:10

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

问题

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

代码

database.yml中:

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

development:
  <<: *default
  database: asreport

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

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 reads(在此输出之后,mysql中的'show tables'仍然只显示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上。

1 个答案:

答案 0 :(得分:0)

您没有遵循Rails Guides中列出的命名惯例。

具体来说,这个:

  

<强> 2.1   创建独立迁移迁移作为文件存储在db / migrate目录中,每个迁移类对应一个。的名字   该文件的格式为YYYYMMDDHHMMSS_create_products.rb,即   说一个UTC时间戳,标识迁移后跟一个   下划线后跟迁移名称。的名字   迁移类(CamelCased版本)应该匹配后者   文件名。例如20080906120000_create_products.rb应该   定义类CreateProducts和   20080906120001_add_details_to_products.rb应该定义   AddDetailsToProducts。 Rails使用此时间戳来确定哪个   应该以什么顺序运行迁移,所以如果你要复制一个   从另一个应用程序迁移或自己生成文件,be   意识到它在订单中的位置。

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

$ bin/rails generate migration AddPartNumberToProducts part_number:string