Sinatra应用程序引发“ ActiveRecord :: ConnectionNotEstablished:未找到带有'primary'的连接池。”在db:上使用database.yaml

时间:2019-02-06 17:50:42

标签: ruby postgresql activerecord sqlite sinatra

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

将其添加到我的app.rb文件中并运行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' foundSinatra - ActiveRecord::ConnectionNotEstablished: No connection pool for ActiveRecord::Base,但它们不适用于此问题。

1 个答案:

答案 0 :(得分:1)

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

  set :database_file, 'config/database.yaml'