我们以前通过ActiveRecord成功地从Rails连接到AWS MySQL实例,但是在我们最近向Heroku推送时,该连接被切断了。我们无法理解为什么,因为我们在AWS RDS设置上启用了所有流量,并且我们的database.yml配置文件中的凭据没有更改。推动Heroku的唯一重大变化是添加了dovenv gem并将对环境变量的控制权传递给了gem。
在我们的三个环境(开发,测试,生产)中启动我们的rails服务器时,我们从ActiveRecord收到NoDatabaseError:
ActiveRecord::NoDatabaseError - Unknown database '<database_name>.us-east-1.rds.amazonaws.com'
我们可以通过MySQL CLI 成功连接到数据库。
database.yml中:
default: &default
adapter: mysql2
encoding: utf8
pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
username: "<username>"
password: "<password>"
host: <database_name>.us-east-1.rds.amazonaws.com
port: <port>
development:
<<: *default
database: test
test:
<<: *default
database: test
production:
<<: *default
相关的本地依赖关系:
activerecord (5.1.4)
mysql2 (0.4.10)
rails (5.1.4)
AWS安全组:
default (<group_id>) CIDR/IP - Inbound 0.0.0.0/0
default (<group_id>) CIDR/IP - Outbound 0.0.0.0/0
Publicly accessible: Yes
我们尝试了什么:
$ brew services list
$ brew services restart mysql
[Warning] IP address '<ip_address>' could not be resolved: Name or service not known
ActiveRecord::StatementInvalid: Mysql2::Error: No database selected
rake db:create RAILS_ENV=development
,其中包含错误:
Mysql2::Error: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '.`<possibly_private_id>`.`us-east-1`.`rds`.`amazonaws`.`com` DEFAULT CHARACTER SET `utf8`' at line 1
mysql.server status
我有一个理论认为,在安装gem dotenv-rails时,我们可能丢失了一些MySQL凭据,这些凭据允许从我们项目的本地目录访问服务器......再一次,我们仍然可以连接到服务器通过MySQL CLI,我们知道AWS上的一切都很好而且健康。我似乎也无法以我的本地用户名或 root登录到mysql。目前正试图解决这个问题。
答案 0 :(得分:0)
解决 - 结果证明它与我在环境变量设置中所做的修改有关。 Rails指南的In this section,它指出特别声明&#34; DATABASE_URL&#34;作为环境变量将自动设置或覆盖config / database.yml文件中声明的database
变量。
就我而言,host
变量(在config / database.yml中设置)已正确设置为MY_DATABASE_NAME.amazon.aws
,但我环境中的DATABASE_URL
变量正在静默设置配置文件&# 39; s database
变量为MY_DATABASE_NAME.amazon.aws
。
我没有名为&#39; MY_DATABASE_NAME.amazon.aws&#39;的数据库,这就是为什么它吓坏了。希望这有助于其他人!