db:migrate 在 Rails 上使用 JRuby 与远程 Amazon MySQL 通过 SSL 连接时出错

Error in db:migrate using JRuby on Rails with remote Amazon MySQL via SSL connection

jruby 1.7.19 错误(ruby 1.9.3 在 oracle JVM 1.8 上兼容)但与相应计划 ruby 1.9.3 在“rake db:migrate" 以通过 SSL 连接修改 Amazon RDS 的 MySQL。

我在 jruby 环境

下“rake db:migrate” 时收到下面的消息
“耙子中止了!
ActiveRecord::JDBCError:用户 'myid'@'ip_of_my_amazon_rds' 的访问被拒绝(使用密码:YES)
arjdbc/jdbc/RubyJdbcConnection.java:453:在“init_connection”中
任务:TOP => db:migrate
(使用 –trace 查看 运行 任务的完整跟踪)”

计划ruby下的“抽成db:migarate”没有问题。 对于 jruby 和普通 ruby,没有 SSL 的“rake db:migrate”没有问题。 我想知道为什么我通过 SSL 连接收到 jruby 的错误。

我的dabase.yml是

发展:
  适配器:mysql2
  编码:utf8
  游泳池:5
  验证服务器证书:真
  使用SSL:真
  需要 SSL:真
  主持人:myhosturl.us-东-1.rds.amazonaws.com
  端口:3306
  sslca: rds-combined-ca-bundle.pem
  用户名:myid
  密码:我的密码
  数据库:开发

Gemfile中对应的gem是

gem 'mysql2',平台::ruby
gem 'jdbc-mysql',平台::jruby
gem 'activerecord-jdbc-adapter',平台::jruby
gem 'jruby-openssl',平台::jruby

我可以在 jruby 和 ruby 环境下通过“rails dbconsole”命令连接同一个数据库而不会出错——即使在database.yml 文件。我从亚马逊网站上抓取了 rds-combined-ca-bundle.pem 文件并将其放在我的应用程序的根目录下。我使用 rbenv 来切换环境。

我想在带有 jruby 的 rails 应用程序中使用 Java 库。如果您有任何解决问题的想法,我将不胜感激。

务必将 JDBC 特定选项放在 properties:

development:
  adapter: mysql2
  encoding: utf8
  pool: 5
  host: myhosturl.us-east-1.rds.amazonaws.com
  port: 3306
  sslca: rds-combined-ca-bundle.pem
  username: myid
  password: mypassword
  database: develop
  properties:
    useSSL: true
    requireSSL: true
    verifyServerCertificate: true

您仍然可能需要将证书 (sslca) 包装成 Java 的格式,只需阅读 jdbc doc 如何...您不需要手动设置属性 - 可以在命令行或 JRUBY_OPTS 中指定,例如-J-Djavax.net.ssl.keyStore=/opt/tomcat/etc/myKS.jks