`

JRuby on Rails连接MySQL遇到的一个问题。

    博客分类:
  • Ruby
阅读更多
按照官方的wiki安装好JRuby、Rails以及需要的adapter、JDBC之后,我试着建了个rails项目,结果数据库建立不起来。执行rake db:create似乎一切正常,没有输出任何错误,结果一执行rake db:migrate就出错:

The driver encountered an error: com.mysql.jdbc.exceptions.MySQLSyntaxErrorException: Unknown database 'jrubydemo_development'

难道数据库没建建立起来?反复对照wiki看我的database.yml配置确定没有错之后,开始google,结果只见到人提问,没见到人解决。最后我去翻Rails的源代码,找到databases.task文件,发现原来它只认识'mysql',不认识'jdbcmysql'。如果把database.yml里的adapter改回'mysql',运行rake db:create的时候会找不到驱动,因为这样rails会去找C或者ruby写的mysql驱动而不是java的jdbc驱动:

!!! The bundled mysql.rb driver has been removed from Rails 2.2. Please install the mysql gem and try again: gem install mysql.

最后解决的办法是,把"%jruby_home%\lib\ruby\gems\1.8\gems\rails-2.3.4\lib\tasks\databases.task"中所有的 when 'mysql'替换成when 'jdbcmysql'。
保存之后再来试试:
rake db:create
rake db:migrate

成功!

估计jruby上安装的rails跟ruby上安装的rails是同一个源,没有专门的jruby版。。


====================================================================

另外,又遇到个问题,好像JDBC驱动居然不认识longtext类型……
搜索了一下,解决办法在这:http://kenai.com/projects/jruby/pages/Adding_Datatypes_to_ActiveRecord-JDBC
按这个办法试了试,不行。。
后来发现是因为默认生成的代码是这样的:
  def self.up
    create_table :blogs do |t|
      t.string :title
      t.longtext :content

      t.timestamps
    end
  end

改成这样就行了:
  def self.up
    create_table :blogs do |t|
      t.string :title
      t.column :content, :longtext

      t.timestamps
    end
  end


JRuby真蛋疼……睡觉。

p.s: JavaEye博客居然没有JRuby分类。。
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics