我是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建议。
答案 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/我安装了
然后我将一个32位版本的postgres安装到C:\ PostgreSQL \ 9.2
然后我使用
安装了pg gemsubst 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