Ruby on rails 使用Docker Compose时设置Rails/Rack环境
我有一个docker compose环境,如下所示:Ruby on rails 使用Docker Compose时设置Rails/Rack环境,ruby-on-rails,docker,Ruby On Rails,Docker,我有一个docker compose环境,如下所示: web: build: . environment: - RAILS_ENV=development - RACK_ENV=development - DOCKERIZED=true env_file: - .env ports: - "3000:3000" volumes: - .:/usr/app links: - redis - db - search - memcache networ
web:
build: .
environment:
- RAILS_ENV=development
- RACK_ENV=development
- DOCKERIZED=true
env_file:
- .env
ports:
- "3000:3000"
volumes:
- .:/usr/app
links:
- redis
- db
- search
- memcache
networks:
- front-tier
- back-tier
command: bundle exec rails s -p 3000 -b '0.0.0.0'
在我的.env文件中,我有以下内容:
RAILS_ENV=development
RACK_ENV=development
问题是,当我尝试使用
docker-compose run web bundle exec rake db:setup RAILS_ENV=development
对数据库进行种子设定时,日志中“Rails.env”的输出为“production”。当我跑的时候
docker-compose run web env
它获得以下环境变量:
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
HOSTNAME=b6fcc864cf45
TERM=xterm
DOCKERIZED=true
RACK_ENV=development
RAILS_ENV=development
但是,当我运行以下命令时:
docker-compose run web rails r "print Rails.env"
我得到:
> production
因此,有些东西让我的web容器认为它在生产环境中。我已在Dockerfile中将RAILS_ENV设置为web容器的环境变量,并通过以下方式启动服务器:
CMD ["bundle", "exec", "rails", "server", "-b", "0.0.0.0", "-e", "development"]
这也会造成问题,因为我无法连接到单独容器中的redis实例,因为Rails正在获取生产设置并映射到“localhost”而不是“redis”容器
我们正在使用Ruby 2.3.1(在RVM下)和Rails 4.2.6。我们正在使用Docker Compose 1.8.0
这个设置在大约一个月前运行得很好,所以我们怀疑,在这条线路的某个地方,一个小的变化悄悄进入堆栈,目的是让我的生活变得悲惨
总结一下我的问题:Rails从哪里获得了不正确的环境?我已经检查了所有已知的位置。您是否正在使用gem为dotenv rails等变量加载
.env
文件?.ENV文件中是否有RAILS\u ENV
?