rake db:migrate 不能正确执行

数据库连接应该没有问题.
因为可以在mysql的数据库中建立
schema_migrations表

数据库创建的代码很简单.
def self.up
create_table :subjects do |t|
t.columns :title, :string
t.columns :description, :text
end
end

执行rake db:migrate 以后会报告错误.

== CreateSubjects: migrating ========================
-- create_table(:subjects)
rake aborted!
An error has occurred, all later migrations canceled:

因为刚用ruby,不是很熟悉,加上--trace以后,也看不出来具体是什么问题.
rake是0.8.4的版本.
rails是2.3.2
ruby是1.8.6
gem是1.3.1
mysql 是5.1.32的64位版本,我是在windows 2008上用netbeans开发的.

请熟悉的人给解答一下可能的问题,或者是能查找原因的方法,谢谢
[b]问题补充:[/b]
1.执行了上面这位提供的脚本,测试数据库连接没有问题的。

2.下面大家帮我看看trace的信息吧。
E:\Dev\DynamicTraining>rake db:migrate --trace
(in E:/Dev/DynamicTraining)
** Invoke db:migrate (first_time)
** Invoke environment (first_time)
** Execute environment
** Execute db:migrate
== CreateSubjects: migrating =================================================
-- create_table(:subjects)
rake aborted!
An error has occurred, all later migrations canceled:

wrong number of arguments (2 for 0)
./db/migrate//20090326160428_create_subjects.rb:4:in columns'
./db/migrate//20090326160428_create_subjects.rb:4:in
up_without_benchmarks'
D:/ruby/lib/ruby/gems/1.8/gems/activerecord-2.3.2/lib/active_record/connection_a
dapters/abstract/schema_statements.rb:104:in create_table'
D:/ruby/lib/ruby/gems/1.8/gems/activerecord-2.3.2/lib/active_record/connection_a
dapters/mysql_adapter.rb:473:in
create_table'
D:/ruby/lib/ruby/gems/1.8/gems/activerecord-2.3.2/lib/active_record/migration.rb
:352:in send'
D:/ruby/lib/ruby/gems/1.8/gems/activerecord-2.3.2/lib/active_record/migration.rb
:352:in
method_missing'
D:/ruby/lib/ruby/gems/1.8/gems/activerecord-2.3.2/lib/active_record/migration.rb
:328:in say_with_time'
D:/ruby/lib/ruby/1.8/benchmark.rb:293:in
measure'
D:/ruby/lib/ruby/gems/1.8/gems/activerecord-2.3.2/lib/active_record/migration.rb
:328:in say_with_time'
D:/ruby/lib/ruby/gems/1.8/gems/activerecord-2.3.2/lib/active_record/migration.rb
:348:in
method_missing'
./db/migrate//20090326160428_create_subjects.rb:3:in up_without_benchmarks'
D:/ruby/lib/ruby/gems/1.8/gems/activerecord-2.3.2/lib/active_record/migration.rb
:282:in
send'
D:/ruby/lib/ruby/gems/1.8/gems/activerecord-2.3.2/lib/active_record/migration.rb
:282:in migrate'
D:/ruby/lib/ruby/1.8/benchmark.rb:293:in
measure'
D:/ruby/lib/ruby/gems/1.8/gems/activerecord-2.3.2/lib/active_record/migration.rb
:282:in migrate'
(__DELEGATION__):2:in
__send__'
(__DELEGATION__):2:in migrate'
D:/ruby/lib/ruby/gems/1.8/gems/activerecord-2.3.2/lib/active_record/migration.rb
:486:in
migrate'
D:/ruby/lib/ruby/gems/1.8/gems/activerecord-2.3.2/lib/active_record/migration.rb
:562:in call'
D:/ruby/lib/ruby/gems/1.8/gems/activerecord-2.3.2/lib/active_record/migration.rb
:562:in
ddl_transaction'
D:/ruby/lib/ruby/gems/1.8/gems/activerecord-2.3.2/lib/active_record/migration.rb
:485:in migrate'
D:/ruby/lib/ruby/gems/1.8/gems/activerecord-2.3.2/lib/active_record/migration.rb
:472:in
each'
D:/ruby/lib/ruby/gems/1.8/gems/activerecord-2.3.2/lib/active_record/migration.rb
:472:in migrate'
D:/ruby/lib/ruby/gems/1.8/gems/activerecord-2.3.2/lib/active_record/migration.rb
:400:in
up'
D:/ruby/lib/ruby/gems/1.8/gems/activerecord-2.3.2/lib/active_record/migration.rb
:383:in migrate'
D:/ruby/lib/ruby/gems/1.8/gems/rails-2.3.2/lib/tasks/databases.rake:116
D:/ruby/lib/ruby/gems/1.8/gems/rake-0.8.4/lib/rake.rb:617:in
call'
D:/ruby/lib/ruby/gems/1.8/gems/rake-0.8.4/lib/rake.rb:617:in execute'
D:/ruby/lib/ruby/gems/1.8/gems/rake-0.8.4/lib/rake.rb:612:in
each'
D:/ruby/lib/ruby/gems/1.8/gems/rake-0.8.4/lib/rake.rb:612:in execute'
D:/ruby/lib/ruby/gems/1.8/gems/rake-0.8.4/lib/rake.rb:578:in
invoke_with_call_c
hain'
D:/ruby/lib/ruby/1.8/monitor.rb:242:in synchronize'
D:/ruby/lib/ruby/gems/1.8/gems/rake-0.8.4/lib/rake.rb:571:in
invoke_with_call_c
hain'
D:/ruby/lib/ruby/gems/1.8/gems/rake-0.8.4/lib/rake.rb:564:in invoke'
D:/ruby/lib/ruby/gems/1.8/gems/rake-0.8.4/lib/rake.rb:2027:in
invoke_task'
D:/ruby/lib/ruby/gems/1.8/gems/rake-0.8.4/lib/rake.rb:2005:in top_level'
D:/ruby/lib/ruby/gems/1.8/gems/rake-0.8.4/lib/rake.rb:2005:in
each'
D:/ruby/lib/ruby/gems/1.8/gems/rake-0.8.4/lib/rake.rb:2005:in top_level'
D:/ruby/lib/ruby/gems/1.8/gems/rake-0.8.4/lib/rake.rb:2044:in
standard_exceptio
n_handling'
D:/ruby/lib/ruby/gems/1.8/gems/rake-0.8.4/lib/rake.rb:1999:in top_level'
D:/ruby/lib/ruby/gems/1.8/gems/rake-0.8.4/lib/rake.rb:1977:in
run'
D:/ruby/lib/ruby/gems/1.8/gems/rake-0.8.4/lib/rake.rb:2044:in standard_exceptio
n_handling'
D:/ruby/lib/ruby/gems/1.8/gems/rake-0.8.4/lib/rake.rb:1974:in
run'
D:/ruby/lib/ruby/gems/1.8/gems/rake-0.8.4/bin/rake:31
D:/ruby/bin/rake:16:in `load'
D:/ruby/bin/rake:16

谢谢

[b]问题补充:[/b]

我已经按照您的提示,将columns的s去掉了.因为我是用的netbeans,它自动给补充的是columns,我没有注意后面还有一个方法.

目前已经完全正确了,非常感谢.

仔细考虑之后发现:
[code="ruby"] def self.up
create_table :subjects do |t|
t.columns :title, :string
t.columns :description, :text
end
end [/code]

t.column[color=red]s[/color]
不应该有s

  1. 请贴出trace信息

另,理论上讲,要先执行rake db:create

所以,也要看你的创建代码写到哪了schema.r还是migrate目录下
而且,数据库能不能用,还是测试一下的才准,因为,能在mysql建立不能说明,驱动连接没有问题,所以测试驱动还是请用这段代码试试:

[code="ruby"]
require "mysql"

begin

dbh = Mysql.real_connect("localhost", "testUser", "testPassword", "testDB")

dbh.query("drop table if exists test_rb")
dbh.query("create table test_rb(id int,name varchar(20))")
dbh.query("insert into test_rb values(1,'ss')")
dbh.query("insert into test_rb values(1,'aaa')")
printf "%d rows were inserted\n",dbh.affected_rows

res=dbh.query("SELECT name FROM test_rb")
puts "===============\n"
while row=res.fetch_row do
printf "%s,%s\n",row[0],row[1]
end
puts "================\n"
puts "Server version:"+dbh.get_server_info
rescue Mysql::Error=>e
puts "Error code:#{e.errno}"
puts "Error message:#{e.error}"
puts "Error SQLSTATE:#{e.sqlstate}" if e.respond_to?("sqlstate")
ensure
dbh.close if dbh
end
[/code]

看看有没有安装数据库驱动和rake

这个错误可是真够隐蔽的