rails database.yml不接受ERB
在我的database.yml中,我有:
staging: adapter: encoding: database: host: port: pool: username: password:
但是,在实际启动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/_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)
这没有任何意义,因为在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
(取自Rails 4.2稳定代码,我正在运行4.2.1)
我完全不知道为什么这不起作用,有什么想法吗?
我刚刚经历过同样的事情,并且发现了你的post。 我一直在关注一个教程,让我创建一个包含以下代码的puma.conf文件:
ActiveRecord::Base.establish_connection( YAML.load_file( "#{app_dir}/config/database.yml" )[rails_env])
我修改了以下内容,一切都按预期工作:
require 'erb' ActiveRecord::Base.establish_connection( YAML.load( ERB.new( File.read( "#{app_dir}/config/database.yml" )).result)[rails_env])