Ruby on rails docker compose:无法将Rails应用程序连接到Mysql
我正在尝试使用Docker compose和Dockerfile将我的Ruby on Rails应用程序连接到Mariadb数据库,并将数据库(.sql文件)导入该数据库 我使用的是Ruby on rails docker compose:无法将Rails应用程序连接到Mysql,ruby-on-rails,docker,docker-compose,mariadb,dockerfile,Ruby On Rails,Docker,Docker Compose,Mariadb,Dockerfile,我正在尝试使用Docker compose和Dockerfile将我的Ruby on Rails应用程序连接到Mariadb数据库,并将数据库(.sql文件)导入该数据库 我使用的是gem'mysql2','>=0.3.18','
gem'mysql2','>=0.3.18','<0.5'
在config/database.yml中,我尝试了:
default: &default
adapter: mysql2
encoding: utf8
pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
username: root
password: somepassword
host: mysql2://root:somepassword@127.0.0.1:3306/mydatabase
development:
<<: *default
在docker-compose.yml中:
services:
mysql:
image: mariadb:10.3
container_name: mysql
volumes:
- ./database.sql:/docker-entrypoint-initdb.d/database.sql
- ~/.docker-volumes/database/mysql:/var/lib/mysql
environment:
MYSQL_ROOT_PASSWORD: somepassword
MYSQL_DATABASE: mydatabase
ports:
- '3306:3306'
rails_app:
build: .
restart: always
container_name: rails_app
environment:
DATABASE_URL: mysql2://root:somepassword@mysql/mydatabase
links:
- mysql:sql_srv
- redis
- elasticsearch
volumes:
- .:/rails_app
ports:
- '3000:3000'
env_file:
- .rails_app.env
在.rails_app.env中:
SECRET_KEY_BASE=sometoken
WORKER_PROCESSES=1
LISTEN_ON=127.0.0.1:3000
DATABASE_URL=mysql2://root:somepasssword@127.0.0.1:3306/mydatabase
我上次尝试的错误是:
Mysql2::Error: Can't connect to MySQL server on '127.0.0.1' (111 "Connection refused")
...
ERROR: Service 'rails_app' failed to build: The command '/bin/sh -c bundle exec rake RAILS_ENV=production DATABASE_URL=mysql2://root:somepassword@127.0.0.1:3306/mydatabase SECRET_TOKEN=sometoken assets:precompile' returned a non-zero code: 1
如何解决此问题并通过Docker compose成功将rails应用程序与mariadb连接
有什么帮助吗?请尝试将
数据库.yml
更改为
default: &default
adapter: mysql2
encoding: utf8
pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
username: root
password: somepassword
host: sql_srv
database: mydatabase
port: 3306
您将传递到数据库服务的rails\u app
service链接,并将别名设置为sql\u srv
您可以从rails应用程序连接到数据库,使用docker网络中解析的链接连接到
mysql
服务。尝试两种服务网络模式:主机
部分什么是sql\u srv?
Mysql2::Error: Can't connect to MySQL server on '127.0.0.1' (111 "Connection refused")
...
ERROR: Service 'rails_app' failed to build: The command '/bin/sh -c bundle exec rake RAILS_ENV=production DATABASE_URL=mysql2://root:somepassword@127.0.0.1:3306/mydatabase SECRET_TOKEN=sometoken assets:precompile' returned a non-zero code: 1
default: &default
adapter: mysql2
encoding: utf8
pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
username: root
password: somepassword
host: sql_srv
database: mydatabase
port: 3306
links:
- mysql:sql_srv
- redis
- elasticsearch