Rails:ActiveRecord::Base没有连接池

25
我正在尝试使用Rails 4.2.6开发应用程序,想要使用Postgres作为数据库。服务器启动正常,但当我尝试加载页面时,出现“没有ActiveRecord :: Base的连接池”的错误。可能是什么原因呢?
编辑: pg gem 没有正常工作,我不得不在启动服务器之前将其注释掉,然后在 GemFile 中取消注释。我意识到我使用的是 Ruby 2.3 而非预期的 Ruby 2.0,于是移除了 Ruby 2.3 并在 Ruby 2.0 环境下重新设置了所有内容。现在它正常工作了。
我曾经在某个地方读到,新版本的 Rails 存在一些与 'pg' gem 相关的问题,需要人们使用 'gem install pg --pre' 安装 gem。我尝试了这个方法,但是我的应用程序仍然需要在 GemFile 中使用 'pg' gem,结果上述问题又出现了。
这就是我的 database.yml 文件最终的样子:
  default: &default
     adapter: postgresql
     encoding: unicode
     host: localhost
     username: -------
     password: -------
     pool: 5

  development:
     <<: *default
     database: myDbName

database.yml文件可能存在问题。 - uzaif
我猜你应该指定端口(如果你没有更改过postgres默认值,那么是5432)。 - Alexander Gorg
10个回答

44

如果您在运行rake任务时遇到此错误,很可能是在执行您的任务之前未运行:environment任务。

更改为:

task :task_name do
end

致:

task task_name: :environment do
end

应该修复这个问题。


1
我们需要在哪个文件中进行更改? - Dynamo
无法加载Rails环境的Rake任务 - golfadas
在我的情况下(Roda应用程序,而不是Rails),类似的操作是将Rake::TestTask.new(:test) do |t|更改为Rake::TestTask.new(name: :test, deps: :environment) do |t|。希望这对其他人有所帮助。 - MegaTux

11

当服务器无法找到其依赖的相应数据库以从中提取数据时,就会出现此问题。

我也遇到了同样的问题,我更新了我的Sqlite3版本,它比当前的Puma Server版本支持的版本要高。

我只需卸载Sqlite3版本,然后安装当前版本的Puma Server支持的版本即可解决问题。

gem uninstall sqlite3

这将卸载Sqlite3的更新版本,然后您可以运行下面的代码,指定当前服务器支持的版本。

gem install sqlite3

或者你也可以打开Gemfile文件,然后包含你正在使用的数据库版本

gem 'sqlite3', '~> 1.3.6' 

N/B: 在撰写本答案时,sqlite3版本是最新版本

然后运行

bundle update

安装您指定的数据库版本。

就这些了。

希望这有所帮助。


3

对于PostgreSQL,您的database.yml文件应该如下所示:

default: &default
  adapter: postgresql
  encoding: unicode
  # For details on connection pooling, see rails configuration guide
  # http://guides.rubyonrails.org/configuring.html#database-pooling
  pool: 5

development:
  <<: *default
  database: your_db_name

同时确保你已经安装了相关gem,在Gemfile中添加:

gem 'pg'

最后,重新启动您的服务器。

希望这有所帮助。

编辑:我差点忘了,确保您的PostgresSQL正在运行,请查看此链接进行下载和设置。


2

我只需要重新启动服务器,警告就会消失。


2

检查 database.yml 是否所有设置都正确。如果是第一次,并且你还没有创建数据库,请使用以下命令来创建数据库:

rake db:create

如果数据库已经存在,请尝试重置数据库迁移。
rake db:migrate:reset

希望这能解决问题。进入Rails控制台并尝试检查它是否工作正常。


0

当我尝试在创建数据库之前访问模型时,遇到了相同的问题。

确保至少运行一次 rake db:migrate

如果您已经运行迁移,请按照先前答案中提到的检查数据库。


0

我不得不重新启动服务器,并确保您输入了用户名和密码。创建开发和测试数据库。


0
在我的情况下,config/database.yml 从环境变量中获取变量:
# ...
test:
  <<: *default
  database: <%= ENV.fetch("DB_NAME") %>_test
  username: <%= ENV.fetch("DB_USER") %>
  password: <%= ENV.fetch("DB_PASS") %>
# ...

在我运行 bundle exec rails spec 的新终端窗口中,出现错误是因为这些变量未初始化。

解决方法如下:

$ export DB_NAME=mydb
$ export DB_USER=myuser
$ export DB_PASS=mypass
$ bundle exec rails spec

问题已修复。


-1

当你运行rails db:migrate时,数据库中的行将根据您的迁移文件创建。您可以查看模式以获取更多信息。


-2

Rails 5

新应用程序

在测试和开发中都使用Postgresql

规范运行,因此Rails可以连接到Postgresql

但是当我启动Web应用程序时,出现“找不到ID为primary的连接池”。

运行'bin/rails db:migrate:reset'并重新启动应用程序。它奏效了。不知道为什么。

database.yml:

    development:
      adapter: postgresql
      encoding: unicode
      database: rails5_development
      pool: 5
      username: foo
      password: bar
      host: localhost
      port: 5432

    test:
      adapter: postgresql
      encoding: unicode
      database: rails5_test
      pool: 5
      username: foo
      password: bar
      host: localhost
      port: 5432

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接