Localhost:3000声称未安装“gem'pg'”,Heroku应用程序工作正常

时间:2015-10-05 04:26:41

标签: ruby-on-rails ruby postgresql heroku

我的localhost:3000给了我这个错误:

  

为数据库适配器指定'postgresql',但未加载gem。将gem 'pg'添加到您的Gemfile中(并确保其版本达到ActiveRecord所需的最低版本)。

宝石已安装并已捆绑。令我困惑的是,Heroku应用程序运行正常。当我尝试运行rake db:create时,我也遇到了同样的错误。

我目前正在参加学习RoR的课程,我在社区论坛上提出这个问题,但没有运气。

我的宝石文件是:

source 'https://rubygems.org'
ruby '2.2.1'


gem 'rails', '4.2.4'

gem 'sass-rails', '~> 5.0'

gem 'bootstrap-sass', '~> 3.3.5'

gem 'uglifier', '>= 1.3.0'

gem 'coffee-rails', '~> 4.1.0'

gem 'turbolinks'

gem 'jbuilder', '~> 2.0'

gem 'sdoc', '~> 0.4.0', group: :doc

group :development, :test do
    gem 'sqlite3'
end

group :production do

gem 'pg', '~>0.18.3'

gem 'rails_12factor'

end

group :development, :test do

  gem 'byebug'

end

group :development do

  gem 'spring'

end

我的database.yml是:

default: &default
  adapter: postgresql
  pool: 5
  timeout: 5000

development:

  <<: *default
  adapter: postgresql
  encoding: unicode
  database: my_development
  username: davideye
  password: 1234
  host: localhost
  port: 5432


test:

  <<: *default
  database: my_test
  username: davideye
  password: 1234

production:

  <<: *default
  database: my_production
  username: davideye
  password: 1234

4 个答案:

答案 0 :(得分:1)

在database.yml中,您已为开发定义了postgres,而在gemfile中已定义sqlite3进行开发。所以要么改变你的database.yml,要么在开发中的gemfile中而不是sqlite3pg

答案 1 :(得分:1)

这里的问题是你的Gemfile。

    group :production do
      gem 'pg', '~>0.18.3'
      gem 'rails_12factor'
    end

这告诉Bundler只在生产中加载pg(这就是为什么它适用于Heroku)。

您可以将gem 'pg' ...移出group :production块,以便它也包含在开发中,或者在开发环境中使用sqlite3。

答案 2 :(得分:0)

当您对sqlite3dev env

使用test
# Gemfile
group :development, :test do
  gem 'sqlite3'
end

将适配器更改为开发和测试块中的sqlite3

# config/database.yml
default: &default
  pool: 5
  timeout: 5000

development:
  <<: *default
  adapter: sqlite3
  database: db/my_development.sqlite3

test:
  <<: *default
  adapter: sqlite3
  database: db/my_test.sqlite3

production:
  <<: *default
  adapter: postgresql
  database: my_production
  username: davideye
  password: 1234
  host: localhost
  port: 5432

答案 3 :(得分:0)

问题是因为你在生产模式和工业模式中添加了宝石'pg'。对于开发,你根据你的gemfile使用'sqlite',但你根据你的database.yml使用postgresql进行开发

所以,从生产区块中删除gem'pg'&amp;把它放在任何街区之前。