在使用Docker Compose时设置Rails / Rack环境
我有一个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 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”的输出是“生产” 。 当我跑步
docker-compose run web env
它获得以下环境variables:
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容器认为它在生产环境中。 我已经在Web容器的Dockerfile中将RAILS_ENV设置为环境variables,并使用以下命令启动服务器:
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在不正确的环境中起了什么作用? 我已经检查了所有已知的地方。