rails database.yml不接受ERB

Chr*_*rus 11 yaml ruby-on-rails erb environment-variables ruby-on-rails-4

在我的database.yml中,我有:

staging:
  adapter: <%= ENV['DATABASE_ADAPTER'] %>
  encoding: <%= ENV['DATABASE_ENCODING'] %>
  database: <%= ENV['DATABASE'] %>
  host: <%= ENV['DATABASE_HOST'] %>
  port: <%= ENV['DATABASE_PORT'].to_i %>
  pool: <%= ENV['DATABASE_POOL'].to_i %>
  username: <%= ENV['DATABASE_USERNAME'] %>
  password: <%= ENV['DATABASE_PASSWORD'] %>
Run Code Online (Sandbox Code Playgroud)

但是,在实际启动puma时它不会读取ERB部分:

/usr/local/lib/ruby/gems/2.1.0/gems/activesupport-4.2.1/lib/active_support/dependencies.rb:274:in 
`require': Could not load 'active_record/connection_adapters/<%= ENV['DATABASE_ADAPTER'] %>_adapter'. 
Make sure that the adapter in config/database.yml is valid. If you use an adapter other than 'mysql', 'mysql2', 'postgresql' or 'sqlite3'
add the necessary adapter gem to the Gemfile. (LoadError)
Run Code Online (Sandbox Code Playgroud)

这没有任何意义,因为在Rails代码中加载数据库配置:

  def database_configuration
    yaml = Pathname.new(paths["config/database"].existent.first || "")

    config = if yaml.exist?
      require "yaml"
      require "erb"
      YAML.load(ERB.new(yaml.read).result) || {}
    elsif ENV['DATABASE_URL']
      # Value from ENV['DATABASE_URL'] is set to default database connection
      # by Active Record.
      {}
    else
      raise "Could not load database configuration. No such file - #{yaml}"
    end

    config
  rescue Psych::SyntaxError => e
    raise "YAML syntax error occurred while parsing #{paths["config/database"].first}. " \
          "Please note that YAML must be consistently indented using spaces. Tabs are not allowed. " \
          "Error: #{e.message}"
  rescue => e
    raise e, "Cannot load `Rails.application.database_configuration`:\n#{e.message}", e.backtrace
  end
Run Code Online (Sandbox Code Playgroud)

(取自Rails 4.2稳定代码,我正在运行4.2.1)

我完全不知道为什么这不起作用,任何想法?

use*_*995 25

我刚刚经历过同样的事情,并且发现了你的帖子.我一直在关注一个教程,让我创建一个包含以下代码的puma.conf文件:

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

我修改为以下,一切按预期工作:

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