rails database.yml 不接受 ERB
rails database.yml not accepting ERB
在我的 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'] %>
但是在实际启动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)
这没有意义,因为在 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])
在我的 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'] %>
但是在实际启动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)
这没有意义,因为在 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])