我正在尝试在phusion / passenger-ruby21容器和单独的mysql:5.5.46容器上部署Ruby on Rails应用程序。两者都没有使用docker撰写链接。
我用以下方式运行Passenger-ruby容器:
sudo docker run -it -p 80:80 --link mysql55:mysql -e .env --name ror1 rubyonrails-phusionimg2 /bin/bash
mysql容器:
sudo docker run --detach --name mysql55 --env MYSQL_ROOT_PASSWORD=**** --env MYSQL_USER=**** --env MYSQL_PASSWORD=**** --env MYSQL_DATABASE=**** mysql:5.5.46
这是我在Rails应用中的database.yml
。
staging:
adapter: mysql2
database: "<%= ENV["DATABASE_NAME"] %>"
host: "<%= ENV["MYSQL_PORT_3306_TCP_ADDR"] %>"
port: "<%= ENV["MYSQL_PORT_3306_TCP_PORT"] %>"
username: "<%= ENV["DATABASE_USERNAME"] %>"
password: "<%= ENV["DATABASE_STAGING_PASSWORD"] %>"
这是webapp.conf:
# /etc/nginx/sites-enabled/webapp.conf:
server {
listen 80;
server_name *****.com;
root /home/app/webapp/public;
passenger_enabled on;
rails_env staging;
index index.html index.htm;
# auth_basic "Restricted";
# auth_basic_user_file /etc/nginx/htpasswd;
}
rake db:create db:migrate
成功运行,这意味着具有登台环境的rake程序能够到达mysql数据库容器。但是从乘客仪表板我仍然得到Can't connect to local MySQL server through socket /var/run/mysqld/mysqld.sock (2)
我错过了什么吗?所有环境似乎都是正确的。
答案 0 :(得分:0)
您没有在应用程序中指定与mysql的连接主机。
如果你没有指定主机mysql将尝试连接你主机上的服务器而不是容器中的服务器。
答案 1 :(得分:0)
我更改了app database.yml文件中的mysql数据库env变量,这些变量在容器启动并连接到mysql数据库时预先加载。例如“DATABASE_NAME”到“MYSQL_ENV_MYSQL_DATABASE”。
staging:
adapter: mysql2
database: <%= ENV['MYSQL_ENV_MYSQL_DATABASE'] %>
host: <%= ENV['MYSQL_PORT_3306_TCP_ADDR'] %>
port: <%= ENV['MYSQL_PORT_3306_TCP_PORT'] %>
username: <%= ENV['MYSQL_ENV_MYSQL_USER'] %>
password: <%= ENV['MYSQL_ENV_MYSQL_PASSWORD'] %>`