【发布时间】:2011-02-10 02:00:52
【问题描述】:
问题是我无法将列类型更改为“文本”
这是我看到的错误:
DarkBook:playground Justin$ rake migrate_up(在 /Users/Justin/Dropbox/Business/datamapper/playground 中)~开始迁移 == 执行迁移 #1:create_person_table CREATE TABLE people (id SERIAL PRIMARY KEY, name VARCHAR(2), age INTEGER) ENGINE = InnoDB CHARACTER SET utf8 COLLATE utf8_general_ci -> 0.0112s -> 0.0129s == 执行向上迁移 #2:change_name_constraints rake 中止!未初始化的常量 SQL::TableModifier::Text /Users/Justin/Dropbox/Business/datamapper/playground/rakefile.rb:61:in `block (3 levels) in ' (通过使用 --trace 运行任务查看完整跟踪)
我用来测试 DataMapper 的 Rake 脚本:https://gist.github.com/818143
似乎好像 TableModifier 类中的 change_column 方法没有正确地将列更改语句转换为 MySQL。其他看似相关的错误是,如果我尝试将列转换为长度较长的字符串,我会得到以下信息:
DarkBook:playground Justin$ rake migrate_up(在 /Users/Justin/Dropbox/Business/datamapper/playground 中)~开始迁移 == 执行迁移 #2:change_name_constraints
ALTER TABLE people ALTER COLUMN name TYPE String
~ 你的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 1 行的“类型字符串”附近使用正确的语法(代码:1064,sql 状态:42000,查询:ALTER TABLE people ALTER COLUMN name TYPE String,uri : mysql://root:@127.0.0.1datamapper_test) rake 中止!您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 1 行的“TYPE String”附近使用正确的语法
/Users/Justin/Dropbox/Business/datamapper/playground/rakefile.rb:60:in `block (2 levels) in '(通过使用--trace运行任务查看完整跟踪)
根据我对 MySQL 的了解,“ALTER TABLE people ALTER COLUMN name TYPE String”不是有效的 MySQL 查询命令。 TYPE 不应该在那里,String 应该被转换为 VARCHAR。
查看 change_column 方法,我发现它只是我提供的类型的直接传递。这让我觉得也许我不应该直接调用 change_column 方法?
一旦我弄清楚了这一点并且我的工作进展顺利,我就会记录这些东西,因为我发现 DataMapper 的迁移 api 是地狱般的。
【问题讨论】:
标签: mysql ruby datamapper