Rails不会替换database.yml中的ENV值 [英] Rails not replace ENV's value in database.yml

查看:160
本文介绍了Rails不会替换database.yml中的ENV值的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在docker容器中运行Rails应用程序,但是当我访问该应用程序时,该应用程序返回以下错误

I'm running a Rails application in docker container, but when I access, the application returns the error below

当我运行命令时

erb config/database.yml

env变量被替换

docker-compose:

docker-compose:

version: '3'
networks:
  banco:
  web:
  fila:
services:
  db:
    image: postgres:9.6
    env_file:
      - './docker/.env.db'
    networks:
      - banco
  app:
    build: .
    links:
      - db
    env_file:
      - './docker/.env.web'
    networks:
      - banco
      - web
      - fila
    depends_on:
      - db
    expose:
      - "3000"
  frontend:
    image: nginx:1.13
    volumes:
      - ./docker/nginx/default:/etc/nginx/nginx.conf
      - ./docker/nginx/default.conf:/etc/nginx/conf.d/default.conf
    ports:
      - 8081:80
    networks:
      - web
    depends_on:
      - app

dockerfile:

dockerfile:

FROM centos:7.4.1708
LABEL maintainer 'Blabla'

# Pre install
RUN yum -y install initscripts; \
    yum clean all; \
    yum -y update;  \
    yum -y install svn git git-svn telnet; \
    yum -y install postgresql-devel gcc-c++ patch readline readline-devel zlib zlib-devel libcurl-devel ImageMagick ImageMagick-devel libyaml-devel libffi-devel openssl-devel make bzip2 autoconf automake libtool bison;

# Ferramentas uteis
RUN yum -y install bash-completion; \
    yum -y install yum-plugin-priorities; \
    yum -y install epel-release; \
    yum -y install http://pkgs.repoforge.org/rpmforge-release/rpmforge-release-0.5.3-1.el7.rf.x86_64.rpm; \
    yum -y install vim-enhanced; \
    yum -y install htop;

RUN gpg --keyserver hkp://keys.gnupg.net --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3 7D2BAF1CF37B13E2069D6956105BD0E739499BDB
RUN \curl -L https://get.rvm.io | bash -s stable
RUN /bin/bash -l -c "rvm requirements"
RUN /bin/bash -l -c "rvm install 2.3"
RUN /bin/bash -l -c "gem install bundler --no-ri --no-rdoc"

RUN mkdir /usr/app
WORKDIR /usr/app

COPY . /usr/app

RUN /bin/bash -l -c "bundle check || bundle install"

RUN /bin/bash -l -c "RAILS_ENV=production bundle exec rake generate_secret_token"

RUN /bin/bash -l -c "foreman export systemd /etc/systemd/system -u root -a redmine_visagio"

CMD ["/sbin/init"]

database.yml

database.yml

default: &default
  adapter: postgresql
  encoding: utf8
  host: db
  database: <%= ENV['DB_NAME'] %>
  username: <%= ENV['DB_USER'] %>
  password: <%= ENV['DB_PASSWORD'] %>

development:
  <<: *default

test:
  <<: *default

production:
  <<: *default

nginx.conf

nginx.conf

user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;
env DB_NAME;
env DB_USER;
env DB_PASSWORD;

# Load dynamic modules. See /usr/share/nginx/README.dynamic.
include /usr/share/nginx/modules/*.conf;

events {
    worker_connections 1024;
}

http {
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;

    sendfile            on;
    tcp_nopush          on;
    tcp_nodelay         on;
    keepalive_timeout   65;
    types_hash_max_size 2048;

    include             /etc/nginx/mime.types;
    default_type        application/octet-stream;

    # Load modular configuration files from the /etc/nginx/conf.d directory.
    # See http://nginx.org/en/docs/ngx_core_module.html#include
    # for more information.
    include /etc/nginx/conf.d/*.conf;
}

.env.db:

POSTGRES_DB=redmine
POSTGRES_USER=redmine
POSTGRES_USER_PASSWORD=some_password

.env.web:

DB_NAME=redmine
DB_USER=redmine
DB_PASSWORD=some_password

容器检查结果:

...
"Env": [
                "DB_PASSWORD=redmine_db",
                "DB_NAME=redmine",
                "DB_USER=some_password",
                "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
                "NGINX_VERSION=1.13.7-1~stretch",
                "NJS_VERSION=1.13.7.0.1.15-1~stretch"
            ],
...

我尝试使用 foreman start rails ,但错误均以两种方式发生.当变量被实际值替换时,应用程序将正常工作

I tried with foreman start and rails s but the error happened in both ways. When the variables are replaced by the real values, the application works normally

有什么主意吗?谢谢!

推荐答案

使用@ user155995的答案从此其他链接解决了问题: rails database.yml不接受ERB

The problem was solved using the answer of @user155995 from this other link: rails database.yml not accepting ERB

我刚刚经历了同样的事情,并且偶然发现了您的帖子.我有 一直在遵循的教程让我创建了一个puma.conf文件,该文件 包含以下代码:

I just experienced the same thing, and came across your post. I had been following a tutorial that had me create a puma.conf file that contained the code below:

ActiveRecord::Base.establish_connection( YAML.load_file( "#{app_dir}/config/database.yml" )[rails_env])

我修改为以下内容,并且一切正常:

I modified to the following, and everything worked as expected:

require 'erb'
ActiveRecord::Base.establish_connection( YAML.load( ERB.new( File.read( "#{app_dir}/config/database.yml" )).result)[rails_env])

感谢@Pavel Oganesyan和@AndrewSwerlick

Thanks to @Pavel Oganesyan and @AndrewSwerlick

这篇关于Rails不会替换database.yml中的ENV值的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆