问题
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:drop
,rake 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
上。
答案 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