【问题标题】:Localhost:3000 claims "gem 'pg'" in not installed, Heroku app is working fine本地主机:3000 声称未安装“gem 'pg'”,Heroku 应用程序运行正常
【发布时间】:2015-10-15 18:38:28
【问题描述】:

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

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

gem 已安装并已捆绑。让我困惑的是 Heroku 应用程序运行良好。当我尝试运行 rake db:create 时,我也会遇到同样的错误。

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

我的 gemfile 是:

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

【问题讨论】:

  • 显示你的 gemfile。我认为这是您将 pg gem 放在哪里的问题。您需要在 production 环境中添加 pg 以及在 development env 中的 dev 中使用的任何其他内容
  • gem pg 正在生产中,而 sqlite3 正在开发中。 Stackflow 不允许我发布屏幕截图,因为我是新用户
  • 只需将gemfile 复制粘贴为您问题中的代码即可。你不需要截图。
  • 能否请您发布您的数据库内容。yml 请确保您定义了sqlite 开发适配器。
  • 正如@Dusht 所说,您现在可以发布database.yml 的内容

标签: ruby-on-rails ruby postgresql heroku


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    这里的问题在于您的 Gemfile。

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

    这告诉 Bundler 仅在生产中加载 pg(这就是它在 Heroku 上工作的原因)。

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

    【讨论】:

      【解决方案3】:

      当您在 devtest 环境中使用 sqlite3

      # 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
      

      【讨论】:

        【解决方案4】:

        问题是因为您在生产模式下添加了 gem 'pg' 并根据 gemfile 使用 'sqlite' 进行开发,但根据 database.yml 使用 postgresql 进行开发

        所以,从生产块中删除 gem 'pg' 并将其放在任何块之前。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-05-02
          • 2014-11-01
          • 2021-04-10
          • 2016-12-30
          • 1970-01-01
          相关资源
          最近更新 更多