Mir*_*318 4 ruby-on-rails docker ruby-dotenv
我不熟悉 Docker 或 devops,但我有这些文件:
.env.生产
DO_NOT_SEND_EMAILS=false
Run Code Online (Sandbox Code Playgroud)
docker-compose.ci.yml
services:
my-app:
environment:
- DO_NOT_SEND_EMAILS=true
Run Code Online (Sandbox Code Playgroud)
Dan*_*nyB 11
如果变量是在环境中定义的,dotenv 似乎不会覆盖它们,按照设计:
默认情况下,它不会覆盖现有的环境变量,因为 dotenv 假设部署环境比应用程序拥有更多有关配置的知识。要覆盖现有环境变量,您可以使用 Dotenv.overload。
所以答案可能取决于您如何使用 dotenv -Dotenv.load或Dotenv.overload。
这是一个最小的测试:
.envSOMEVAR=from .env file
ANOTHERVAR=also from .env file
Run Code Online (Sandbox Code Playgroud)
docker-compose.ymlversion: '3'
services:
test:
build: .
command: ruby test.rb
volumes:
- .:/app
environment:
SOMEVAR: from docker compose
Run Code Online (Sandbox Code Playgroud)
DockerfileFROM dannyben/alpine-ruby
WORKDIR /app
RUN gem install dotenv
COPY . .
Run Code Online (Sandbox Code Playgroud)
test.rbrequire 'dotenv'
# values in .env will override
# Dotenv.overload
# values in .env will be used only if not already set in the environment
Dotenv.load
p ENV['SOMEVAR']
p ENV['ANOTHERVAR']
Run Code Online (Sandbox Code Playgroud)
跑步:
$ docker-compose build
$ docker-compose run test
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7521 次 |
| 最近记录: |