0

我是 Ruby on Rails 的新手。我在我的 Windows 8 系统和 DevKit 上安装了 Rails 4,并安装了pg (PostgreSQL) gem。

> gem install pg
...
Successfully installed pg-0.16.0-x64-mingw32

我创建了一个新的 Rails 应用程序:

> rails new blog -d postgresql

但是当我启动 Rails 服务器时

> cd blog
> rails server

并导航到localhost:3000我的浏览器中,我看到了这个错误:

Gem::LoadError Specified 'postgresql' for database adapter, but the gem is not loaded. Add `gem 'pg'` to your Gemfile.

我的 Gemfile 包括以下几行:

# Use postgresql as the database for Active Record
gem 'pg'

另外,如果我这样做

bundle install

pg未在输出中列出。

如果我做

require 'pg'

在我得到的 Ruby 控制台中

=> true

这个问题非常相似

Rails 4 postgres 错误 - 无法创建数据库,因为 pg gem“丢失”,但它不是

但在这种情况下,提问者意识到他使用的是旧版本的 pg gem。我有与 一起安装的版本,gem install pg我认为它是最新的版本。

谁能提供一些故障排除指导?

更新:

从@vinodadhikary 的评论中我试过了bundle update pg

返回

Fetching gem metadata from https://rubygems.org/...........
Fetching gem metadata from https://rubygems.org/..
Resolving dependencies...
Using rake (10.1.0)
...
Your bundle is updated!

没有提到pg。

然后我尝试bundle show pg了,它返回了

Could not find gem 'pg'.
Did you mean pg?

我尝试再次运行服务器,并收到相同的错误。

更新 2

config\database.yml根据现有的 postgres 数据库配置了我的文件,例如

development:
  adapter: postgresql
  encoding: unicode
  database: rails_dev
  pool: 5
  username: postgres
  password: [password]
  host: localhost
  port: 5433

同样用于测试生产。感谢 Artiwarah Damrongchai 的建议。

4

2 回答 2

3

感谢Andy Henson在#RubyOnRails IRC 上的一些帮助,我能够解决这个问题,或者至少可以解决它。

似乎问题可能出在bundler识别 DevKit 提供的 32 位和 64 位版本的 minGW 构建环境的方式上。这里有一个看起来相关的突出错误:

https://github.com/bundler/bundler/issues/2356

但是我能够通过从使用 64 位所有内容切换到使用 32 位所有内容来解决它。这是我的步骤:

我卸载了 64 位 Ruby。然后从http://rubyinstaller.org/downloads/我安装了

  • rubyinstaller-2.0.0-p247.exe
  • DevKit-mingw64-32-4.7.2-20130224-1151-sfx.exe

然后我安装了一个 32 位版本的 postgres 到 C:\PostgreSQL\9.2

然后我使用安装了 pg gem

subst X: "C:\PostgreSQL\9.2"
gem install pg -- --with-pg-dir=X:
subst X: /D

subst在这种情况下,该命令是多余的,因为 postgres 路径中没有空格,但对于其他情况,这是一个很好的技巧。)

然后在我的应用程序主机目录中运行,并根据我的 postgres 设置rails new blog -d postgresql编辑我的文件。conf\database.yml这似乎已经解决了。

于 2013-07-27T00:47:02.843 回答
0

也许你需要像这样配置你的 database.yml 文件:


development: &default
  adapter: postgresql
  host: localhost
  encoding: unicode
  database: your_database
  username: your_username
  password: your_password
  pool: 5
  timeout: 5000
于 2013-07-26T07:03:55.957 回答