Sinatra 应用在 db:migrate 上使用 database.yaml 提高了 "ActiveRecord::ConnectionNotEstablished: No connection pool with 'primary' found."

Sinatra app raises "ActiveRecord::ConnectionNotEstablished: No connection pool with 'primary' found." on db:migrate using database.yaml

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

将此添加到我的 app.rb 文件中 运行ning rake db:migrate 工作正常:

configure :development do
    set :database, "sqlite3:forum-service.sqlite3"
end

但我想将数据库配置分隔在一个 database.yaml 文件中,以保持更清晰的代码。如果我删除上面的代码并添加 config/database.yaml 文件,如下所示,并且 运行 rake db:migrate 我得到:

rake aborted!
ActiveRecord::ConnectionNotEstablished: No connection pool with 'primary' found.

我的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

我的 Rakefile

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 文档 sinatra/databases/postgresql-activerecord,通过制作 config/database.yaml 文件,配置会自动加载,但看起来好像缺少某些东西无法建立连接。也许在我的 rakefile 中添加一些东西来读取配置?

我看过Sinatra, Puma, ActiveRecord: No connection pool with 'primary' found and Sinatra - ActiveRecord::ConnectionNotEstablished: No connection pool for ActiveRecord::Base但是他们没有申请这个问题

sinatra-activerecord 默认在 config/database.yml(不是 yaml)中查找。您可以使用 :database_file 配置选项更改为任何其他路径。

  set :database_file, 'config/database.yaml'