Rails应用程序无法识别postgres gem

时间:2013-07-26 00:59:51

标签: ruby-on-rails windows postgresql gem ruby-on-rails-4

我是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 bug - cannot create database because the pg gem "is missing", but it is not

但在这种情况下,提问者意识到他正在使用旧版本的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

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

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

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

2 个答案:

答案 0 :(得分:3)

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

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

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

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

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

  • ruby​​installer-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路径中没有空格,但对于其他情况来说这是一个很好的技巧。)

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

答案 1 :(得分:0)

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


development: &default
  adapter: postgresql
  host: localhost
  encoding: unicode
  database: your_database
  username: your_username
  password: your_password
  pool: 5
  timeout: 5000