无法从 rails 码头上的控制台连接到数据库
Unable to connect to database from rails console on dockers
我使用 Dockers
在 Digitalocean
上设置了我的 rails 项目。这是我的 docker-compose.prod.yml
文件。
version: "2"
volumes:
db-data:
external: false
services:
db:
image: postgres
env_file: .env.production
volumes:
- db-data:/var/lib/postgresql/data
app:
build: .
env_file: .env
environment:
RAILS_ENV: production
ports:
- "3000:3000"
depends_on:
- db
这是我的 database.yml
文件
default: &default
adapter: postgresql
encoding: unicode
host: db
username: <%= ENV["POSTGRES_USER"] %>
password: <%= ENV["POSTGRES_PASSWORD"] %>
# For details on connection pooling, see rails configuration guide
# http://guides.rubyonrails.org/configuring.html#database-pooling
pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
development:
<<: *default
database: project_development
test:
<<: *default
database: project_test
production:
<<: *default
host: <%= ENV["POSTGRES_HOST"] %>
database: project_production
我创建了两个 docker
图片。一份用于 app
一份用于 postgres/db
.
我的 application
在生产中运行良好。我可以在我的 web
生产页面上创建和删除记录。
但是,当我尝试通过以下命令从 docker bash 访问 rails 的 production database
控制台时:
docker run -i -t project_app:latest bash
访问控制台:
RAILS_ENV=production rails c
在 Rails Console
内,每当我尝试访问任何 model
数据或尝试执行任何查询(i.e Model.first
等)时,我都无法访问 postgres
数据库。它向我显示以下错误:
PG::ConnectionBad: could not connect to server: No such file or directory
Is the server running locally and accepting
connections on Unix domain socket "/var/run/postgresql/.s.PGSQL.5432"?
我已经尝试了很多可能的解决方案来解决这个问题,但无法解决这个问题。
请帮帮我!提前致谢
此处:docker run -i -t project_app:latest bash
您没有提供您的应用程序需要用作凭据的环境变量。
所以使用你的 docker-compose,它已经在这里设置了环境变量:
env_file: .env
所以运行是这样的:
docker run --env-file .env -i -t project_app:latest bash
经过多次尝试,我终于找到了解决办法。我正在使用 docker run -i -t project_app:latest bash
命令访问 container
和 运行 rails console
命令,这是错误的。
访问 container
终端的正确命令是
docker exec -it project_app /bin/bash
访问 terminal
后,我能够成功 运行 query
即 User.first
在 rails console
.
我使用 Dockers
在 Digitalocean
上设置了我的 rails 项目。这是我的 docker-compose.prod.yml
文件。
version: "2"
volumes:
db-data:
external: false
services:
db:
image: postgres
env_file: .env.production
volumes:
- db-data:/var/lib/postgresql/data
app:
build: .
env_file: .env
environment:
RAILS_ENV: production
ports:
- "3000:3000"
depends_on:
- db
这是我的 database.yml
文件
default: &default
adapter: postgresql
encoding: unicode
host: db
username: <%= ENV["POSTGRES_USER"] %>
password: <%= ENV["POSTGRES_PASSWORD"] %>
# For details on connection pooling, see rails configuration guide
# http://guides.rubyonrails.org/configuring.html#database-pooling
pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
development:
<<: *default
database: project_development
test:
<<: *default
database: project_test
production:
<<: *default
host: <%= ENV["POSTGRES_HOST"] %>
database: project_production
我创建了两个 docker
图片。一份用于 app
一份用于 postgres/db
.
我的 application
在生产中运行良好。我可以在我的 web
生产页面上创建和删除记录。
但是,当我尝试通过以下命令从 docker bash 访问 rails 的 production database
控制台时:
docker run -i -t project_app:latest bash
访问控制台:
RAILS_ENV=production rails c
在 Rails Console
内,每当我尝试访问任何 model
数据或尝试执行任何查询(i.e Model.first
等)时,我都无法访问 postgres
数据库。它向我显示以下错误:
PG::ConnectionBad: could not connect to server: No such file or directory
Is the server running locally and accepting
connections on Unix domain socket "/var/run/postgresql/.s.PGSQL.5432"?
我已经尝试了很多可能的解决方案来解决这个问题,但无法解决这个问题。
请帮帮我!提前致谢
此处:docker run -i -t project_app:latest bash
您没有提供您的应用程序需要用作凭据的环境变量。
所以使用你的 docker-compose,它已经在这里设置了环境变量:
env_file: .env
所以运行是这样的:
docker run --env-file .env -i -t project_app:latest bash
经过多次尝试,我终于找到了解决办法。我正在使用 docker run -i -t project_app:latest bash
命令访问 container
和 运行 rails console
命令,这是错误的。
访问 container
终端的正确命令是
docker exec -it project_app /bin/bash
访问 terminal
后,我能够成功 运行 query
即 User.first
在 rails console
.