当前位置: 首页 > 知识库问答 >
问题:

数据库中的错误:通过SSL连接使用JRuby on Rails和远程Amazon MySQL进行迁移

江华容
2023-03-14

jruby 1.7.19(oracle JVM 1.8上兼容ruby 1.9.3)出现错误,但在“Rake DB:Migrate”中使用相应的plan ruby 1.9.3通过SSL连接修改Amazon RDS的MySQL时不会出现错误。

我在jruby环境下“rake db:migrate”时得到了下面的一条消息

“rake aborted!
ActiveRecord::JDBCError: Access denied for user 'myid'@'ip_of_my_amazon_rds' (using password: YES)
arjdbc/jdbc/RubyJdbcConnection.java:453:in `init_connection'
Tasks: TOP => db:migrate
(See full trace by running task with –trace)”

在plan Ruby下“Rake db:migarate”没有问题。对于jruby和普通Ruby,没有SSL的“rake db:migrate”都没有问题。我想知道为什么我通过SSL连接得到jruby的错误。

我的dabase.yml是

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

Gemfile中相应的gem是

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

我可以在jruby和ruby环境下通过“Rails dbconsole”命令连接同一个数据库而不会出错--在这两种情况下都会询问密码,即使在database.yml文件中指定了密码。我从Amazon网站上抓取了rds-comboded-ca-bundle.pem文件,并将其放在应用程序的根目录下。我使用rbenv来切换环境。

我想用JRuby在我的rails应用程序中使用Java库。如果你有任何解决这个问题的想法,我非常感谢。

共有1个答案

尉迟宣
2023-03-14

确保将特定于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文档how...您不需要手动设置属性--这些属性可以在命令行或jruby_opts中指定,例如-j-djavax.net.ssl.keystore=/opt/tomcat/etc/myks.jks

 类似资料:
  • 问题内容: 我在由远程MySQL数据库支持的分布式环境中部署Play应用程序。具体来说,应用程序托管在heroku上,数据库位于Amazon RDS上(尽管这实际上适用于任何远程数据库连接)。由于数据库不仅位于本地主机上,为了安全起见,我更希望通过SSL建立远程MySQL连接。 给定要信任的CA证书,只有可以验证主机证书的情况下,如何配置Play应用程序以通过SSL连接到MySQL服务器? 假定这

  • 问题内容: 如何从Java应用程序通过SSH连接到远程MySQL数据库?小代码示例对我有所帮助,对此我将不胜感激。 问题答案: 我的理解是,您想访问在远程计算机上运行的mysql服务器,并通过SSH隧道侦听端口3306。 要使用命令行ssh客户端从本地计算机上的端口1234到远程计算机上的端口3306的隧道,您可以从本地计算机上键入以下命令: 要从Java执行相同的操作,可以使用JSch(SSH2

  • “无法确定数据库类型None的嵌入式数据库驱动程序类” 我应该给Application.Properties中的spring.datasource.url值什么?或者其他建议?谢了。

  • 连接失败,出现此异常。我无法追踪到底发生了什么? 另外,getconnection之后的db2diag.log是:

  • 请知道,我对数据库很陌生。我能够正确安装mySQL和java连接器驱动程序。但每当我在eclipse中运行程序并尝试从我创建的数据库中检索信息时,我都会收到以下消息:“需要SSL连接,但服务器不支持”。下面是我要使用安全SSL连接运行的代码: `公共静态void main(字符串[]参数){