Ruby Sinatra应用程序在db上引发“ActiveRecord::ConnectionNotesAblished:找不到具有'primary'的连接池”。使用database.yaml迁移

Ruby Sinatra应用程序在db上引发“ActiveRecord::ConnectionNotesAblished:找不到具有'primary'的连接池”。使用database.yaml迁移,ruby,postgresql,activerecord,sqlite,sinatra,Ruby,Postgresql,Activerecord,Sqlite,Sinatra,我有一个sinatra应用程序,我想用database.yaml文件配置我的开发、测试和生产数据库 将此添加到my app.rb文件并运行rake db:migrate工作正常: configure :development do set :database, "sqlite3:forum-service.sqlite3" end 但我希望在database.yaml文件中保持数据库配置的分离,以保持代码更清晰。如果我删除上面的代码并添加config/database.yaml文件,如

我有一个sinatra应用程序,我想用database.yaml文件配置我的开发、测试和生产数据库

将此添加到my app.rb文件并运行rake db:migrate工作正常:

configure :development do
    set :database, "sqlite3:forum-service.sqlite3"
end
但我希望在database.yaml文件中保持数据库配置的分离,以保持代码更清晰。如果我删除上面的代码并添加config/database.yaml文件,如下所示,然后运行rake db:migrate,我会得到:

my config/database.yaml文件

development:
  adapter: sqlite3
  database: db/forum_dev_sqlite3.db
  pool: 5
  timeout: 5000

test:
  adapter: sqlite3
  database: db/forum_test_sqlite3.db
  pool: 5
  timeout: 5000

production:
  adapter: sqlite3
  database: db/forum_prod_sqlite3.db
  pool: 5
  timeout: 5000
我的耙子

require 'sinatra'
require 'sinatra/activerecord'
require 'sinatra/activerecord/rake'
require './app'
require 'rake/testtask'

task :default do
    puts 'type \'rake --tasks\' to list options.'
end

Rake::TestTask.new do |t|
    #t.pattern = "tests/**.rb"
    t.libs << "test"
    t.test_files = FileList['tests/unittest.rb']  # test*.rb for all
    t.verbose = true
end
根据Sinatra docs的说法,通过创建config/database.yaml文件,配置会自动加载,但似乎缺少一些东西使连接成为可能。也许可以在我的rakefile中添加一些内容来读取配置


我看到了,但它们不适用于此问题。

默认情况下,sinatra activerecord在config/database.yml中查找,而不是yaml。您可以使用:database\u file配置选项更改为任何其他路径

  set :database_file, 'config/database.yaml'

我想你想要的是database.yml而不是database。yaml@spike它们是一样的。您可以将YAML内容保存在带有.yml或yamlcheck out的文件中-sinatra正在显式查找.yml。测试后添加了一个带有该内容的答案
  set :database_file, 'config/database.yaml'