![](/img/trans.png)
[英]docker-compose rails app doesn't find db when using up but does when doing run
[英]Rails app with docker-compose does not read .env file
我正在嘗試運行使用 docker-compose 在本地構建的 Rails 應用程序。 我想將所有配置變量保留在.env
,並讓 docker-compose 從此文件中讀取。 但是,在嘗試此操作時,我不斷遇到錯誤:
ActiveRecord::ConnectionNotEstablished (FATAL: password authentication failed for user "postgres")
我的 docker-compose 文件如下所示:
version: "3.9"
services:
db:
container_name: postgres
image: postgres
volumes:
- postgres-data:/var/lib/postgresql/data
ports:
- "5432:5432"
env_file:
- ".env"
web:
container_name: puma
stdin_open: true
tty: true
build:
context: .
dockerfile: Dockerfile
command: bash -c "rm -f tmp/pids/server.pid && bundle exec rails s -p 3000 -b '0.0.0.0'"
volumes:
- .:/myapp
env_file:
- ".env"
ports:
- "3000:3000"
depends_on:
- db
volumes:
postgres-data:
當我運行docker-compose config
時,我可以看到 docker-compose 正在正確讀取我設置的POSTGRES_PASSWORD
配置:
$ docker-compose config
services:
db:
container_name: postgres
environment:
POSTGRES_PASSWORD: admin
image: postgres
[...]
我的.env
位於項目目錄的根目錄中,就像docker-compose.yml
一樣,看起來像這樣(減去此處編輯的另外兩個鍵值對):
POSTGRES_PASSWORD=admin
最后,我的database.yml
文件如下所示:
default: &default
adapter: postgresql
encoding: unicode
database: myapp_db
host: db
# For details on connection pooling, see Rails configuration guide
# https://guides.rubyonrails.org/configuring.html#database-pooling
pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
development:
<<: *default
username: postgres
password: ENV["POSTGRES_PASSWORD"]
我嘗試解決此問題的其他一些要點:
web
容器中啟動了一個交互式byebug
會話,並且可以確認我的 Rails 應用程序(在web
中運行)容器正在返回正確的POSTGRES_PASSWORD
值。docker-compose.yml
以包含如下所示的密碼時,該應用程序就可以很好地向數據庫進行身份驗證。 也就是說,我真的更喜歡使用.env
文件,即使是用於測試和開發用例:[...]
ports:
- "5432:5432"
environment:
POSTGRES_PASSWORD: admin
[...]
dotenv
gem 將我的環境變量加載到 Rails 中。tl;dr 👉 我覺得我已經嘗試了幾乎所有方法來讓 Rails 在使用 docker-compose 時向 Postgres 進行身份驗證,但就是無法正常工作。 我可能在這里遺漏了一些明顯的東西,所以我會喜歡另一雙👀
您忘記在database.yml
上用<%= %>
包裝ENV["POSTGRES_PASSWORD"]
。
你有
password: ENV["POSTGRES_PASSWORD"]
你需要
password: <%= ENV["POSTGRES_PASSWORD"] %>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.