【发布时间】:2015-06-13 23:33:48
【问题描述】:
我在一个 docker 容器中有一个 rails 应用程序(在生产模式下运行),该容器链接到另一个运行 MySQL 服务器实例的容器。该应用程序本身作为“应用程序”用户在 nginx/passenger 下运行。我在rails下配置了生产数据库如下:
production:
adapter: mysql
database: <%= ENV['MYSQL_PRODUCTION_DATABASE'] %>
pool: 5
username: <%= ENV['MYSQL_USER'] %>
password: <%= ENV['MYSQL_PASS'] %>
host: <%= ENV['MYSQL_HOST'] %>
port: <%= ENV['MYSQL_PORT'] %>
在容器运行时设置环境变量。当附加到容器(以 root 身份运行)时,我可以成功执行与数据库相关的 rake 命令(迁移、重置等)。但是,当我尝试在浏览器中加载应用程序时,出现以下错误:
Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)
activerecord (4.2.0) lib/active_record/connection_adapters/mysql_adapter.rb:456:in `real_connect'
activerecord (4.2.0) lib/active_record/connection_adapters/mysql_adapter.rb:456:in `connect'
activerecord (4.2.0) lib/active_record/connection_adapters/mysql_adapter.rb:108:in `initialize'
activerecord (4.2.0) lib/active_record/connection_adapters/mysql_adapter.rb:36:in `new'
activerecord (4.2.0) lib/active_record/connection_adapters/mysql_adapter.rb:36:in `mysql_connection'
有谁知道什么可能导致 mysql 适配器在这种情况下错误地将连接视为本地连接,但在运行 rake 命令时是远程连接?
【问题讨论】:
-
请注意,我也尝试过使用具有相同行为的 postgres:一切都在 root 下使用 rake 命令运行,但实际应用程序无法连接到远程服务器。
标签: mysql ruby-on-rails docker