質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

89.10%

railsでbundle installができません(pgエラー)

解決済

回答 1

投稿

  • 評価
  • クリップ 1
  • VIEW 288

heiro

score 5

バージョンーーーーーーーーーー
ruby 2.5.7p206 
Rails 5.2.4.1
gem 2.7.6.2
Bundler version 2.1.4
psql (PostgreSQL) 9.1.24
ーーーーーーーーーーーーーーー
これまで入力したコマンド(PostgreSQL)ーーーーーーーー
sudo apt-get install -y postgersql

sudo apt-get install -y libpq-dev

sudo -u postgres createuser --createdb vagrant
ーーーーーーーーーーーーーーーーーーーーーーーーーーー

railsアプリの開発準備をしています。
データベースをSQLiteではなくpostgresqlにしてアプリを新規作成したいと思っています。
Postgresqlを含め、ある程度基本的なインストールを済ませることができましたが、
scaffoldをgemに追加してbundleinstallすると以下のようなエラーが表示されます。
エラーの原因をお教えいただけますと幸いです。

エラーメッセージ

To see why this extension failed to compile, please check the mkmf.log which can be found here:

  /home/vagrant/.rbenv/versions/2.5.7/lib/ruby/gems/2.5.0/extensions/x86_64-linux/2.5.0/pg-1.2.2/mkmf.log

extconf failed, exit code 1

Gem files will remain installed in /home/vagrant/.rbenv/versions/2.5.7/lib/ruby/gems/2.5.0/gems/pg-1.2.2 for inspection.
Results logged to /home/vagrant/.rbenv/versions/2.5.7/lib/ruby/gems/2.5.0/extensions/x86_64-linux/2.5.0/pg-1.2.2/gem_make.out

An error occurred while installing pg (1.2.2), and Bundler cannot continue.
Make sure that `gem install pg -v '1.2.2' --source 'https://rubygems.org/'` succeeds before bundling.

In Gemfile:
  pg


mkmf.logを開きましたが、以下のような構文が連なっていました。

find_executable: checking for pg_config... -------------------- yes

--------------------

find_header: checking for libpq-fe.h... -------------------- yes

"gcc -o conftest -I/home/vagrant/.rbenv/versions/2.5.7/include/ruby-2.5.0/x86_64-linux -I/home/vagrant/.rbenv/versions/2.5.7/include/ruby-2.5.0/ruby/backward -I/home/vagrant/.rbenv/versions/2.5.7/includ
e/ruby-2.5.0 -I. -I/usr/include/postgresql -I/home/vagrant/.rbenv/versions/2.5.7/include    -O3 -ggdb3 -Wall -Wextra -Wno-unused-parameter -Wno-parentheses -Wno-long-long -Wno-missing-field-initializers
 -Wno-tautological-compare -Wno-parentheses-equality -Wno-constant-logical-operand -Wno-self-assign -Wunused-variable -Wimplicit-int -Wpointer-arith -Wwrite-strings -Wdeclaration-after-statement -Wimpli
cit-function-declaration -Wdeprecated-declarations -Wno-packed-bitfield-compat -Wsuggest-attribute=noreturn  -fPIC conftest.c  -L. -L/home/vagrant/.rbenv/versions/2.5.7/lib -Wl,-rpath,/home/vagrant/.rbe
nv/versions/2.5.7/lib -L/usr/lib -Wl,-rpath,/usr/lib -L. -L/home/vagrant/.rbenv/versions/2.5.7/lib  -fstack-protector -rdynamic -Wl,-export-dynamic     -Wl,-rpath,/home/vagrant/.rbenv/versions/2.5.7/lib
 -L/home/vagrant/.rbenv/versions/2.5.7/lib -lruby  -lpthread -lrt -ldl -lcrypt -lm   -lc"
checked program was:
/* begin */
1: #include "ruby.h"
2: 
3: int main(int argc, char **argv)
4: {
5:   return 0;
6: }
/* end */

該当のソースコード

Gemfire

# Use postgresql as the database for Active Record
gem 'pg', '>= 0.18', '< 2.0'


database.yml

# PostgreSQL. Versions 9.1 and up are supported.
#
# Install the pg driver:
#   gem install pg
# On OS X with Homebrew:
#   gem install pg -- --with-pg-config=/usr/local/bin/pg_config
# On OS X with MacPorts:
#   gem install pg -- --with-pg-config=/opt/local/lib/postgresql84/bin/pg_config
# On Windows:
#   gem install pg
#       Choose the win32 build.
#       Install PostgreSQL and put its /bin directory on your path.
#
# Configure Using Gemfile
# gem 'pg'
#
default: &default
  adapter: postgresql
  encoding: unicode
  # For details on connection pooling, see Rails configuration guide
  # http://guides.rubyonrails.org/configuring.html#database-pooling
  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>

試したこと

エラー文中にある

gem install pg -v '1.2.2'


を実行してみましたが、行頭が「>」となり、インストールなどの動きはありませんでした。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • SeieiMiyagi

    2020/03/11 12:55

    mkmf.logの最後の方にエラーの原因が書いてると思うので全部貼ってもらうか最後の方を貼って貰えると助かります

    キャンセル

  • heiro

    2020/03/11 13:09 編集

    ご連絡いただきありがとうございます。
    以下、終端の記述となります。

    have_func: checking for PQsetSingleRowMode()... -------------------- no

    "gcc -o conftest -I/home/vagrant/.rbenv/versions/2.5.7/include/ruby-2.5.0/x86_64-linux -I/home/vagrant/.rbenv/versions/2.5.7/include/ruby-2.5.0/ruby/backward -I/home/vagrant/.rbenv/versions/2.5.7/include/ruby-2.5.0 -I. -I/usr/include/postgresql -I/home/vagrant/.rbenv/versions/2.5.7/include -O3 -ggdb3 -Wall -Wextra -Wno-unused-parameter -Wno-parentheses -Wno-long-long -Wno-missing-field-initializers -Wno-tautological-compare -Wno-parentheses-equality -Wno-constant-logical-operand -Wno-self-assign -Wunused-variable -Wimplicit-int -Wpointer-arith -Wwrite-strings -Wdeclaration-after-statement -Wimplicit-function-declaration -Wdeprecated-declarations -Wno-packed-bitfield-compat -Wsuggest-attribute=noreturn -fPIC conftest.c -L. -L/home/vagrant/.rbenv/versions/2.5.7/lib -Wl,-rpath,/home/vagrant/.rbenv/versions/2.5.7/lib -L/usr/lib -Wl,-rpath,/usr/lib -L. -L/home/vagrant/.rbenv/versions/2.5.7/lib -fstack-protector -rdynamic -Wl,-export-dynamic -lpq -Wl,-rpath,/home/vagrant/.rbenv/versions/2.5.7/lib -L/home/vagrant/.rbenv/versions/2.5.7/lib -lruby -lpq -lpthread -lrt -ldl -lcrypt -lm -lc"
    conftest.c: In function 't':
    conftest.c:13:57: error: 'PQsetSingleRowMode' undeclared (first use in this function)
    conftest.c:13:57: note: each undeclared identifier is reported only once for each function it appears in
    conftest.c: At top level:
    cc1: warning: unrecognized command line option "-Wno-self-assign" [enabled by default]
    cc1: warning: unrecognized command line option "-Wno-constant-logical-operand" [enabled by default]
    cc1: warning: unrecognized command line option "-Wno-parentheses-equality" [enabled by default]
    cc1: warning: unrecognized command line option "-Wno-tautological-compare" [enabled by default]
    checked program was:
    /* begin */
    1: #include "ruby.h"
    2:
    3: /*top*/
    4: extern int t(void);
    5: int main(int argc, char **argv)
    6: {
    7: if (argc > 1000000) {
    8: printf("%p", &t);
    9: }
    10:
    11: return 0;
    12: }
    13: int t(void) { void ((*volatile p)()); p = (void ((*)()))PQsetSingleRowMode; return !p; }
    /* end */

    "gcc -o conftest -I/home/vagrant/.rbenv/versions/2.5.7/include/ruby-2.5.0/x86_64-linux -I/home/vagrant/.rbenv/versions/2.5.7/include/ruby-2.5.0/ruby/backward -I/home/vagrant/.rbenv/versions/2.5.7/include/ruby-2.5.0 -I. -I/usr/include/postgresql -I/home/vagrant/.rbenv/versions/2.5.7/include -O3 -ggdb3 -Wall -Wextra -Wno-unused-parameter -Wno-parentheses -Wno-long-long -Wno-missing-field-initializers -Wno-tautological-compare -Wno-parentheses-equality -Wno-constant-logical-operand -Wno-self-assign -Wunused-variable -Wimplicit-int -Wpointer-arith -Wwrite-strings -Wdeclaration-after-statement -Wimplicit-function-declaration -Wdeprecated-declarations -Wno-packed-bitfield-compat -Wsuggest-attribute=noreturn -fPIC conftest.c -L. -L/home/vagrant/.rbenv/versions/2.5.7/lib -Wl,-rpath,/home/vagrant/.rbenv/versions/2.5.7/lib -L/usr/lib -Wl,-rpath,/usr/lib -L. -L/home/vagrant/.rbenv/versions/2.5.7/lib -fstack-protector -rdynamic -Wl,-export-dynamic -lpq -Wl,-rpath,/home/vagrant/.rbenv/versions/2.5.7/lib -L/home/vagrant/.rbenv/versions/2.5.7/lib -lruby -lpq -lpthread -lrt -ldl -lcrypt -lm -lc"
    /tmp/cc8zS8Mu.o: In function `t':
    /home/vagrant/.rbenv/versions/2.5.7/lib/ruby/gems/2.5.0/gems/pg-1.2.2/ext/conftest.c:14: undefined reference to `PQsetSingleRowMode'
    collect2: ld returned 1 exit status
    checked program was:
    /* begin */
    1: #include "ruby.h"
    2:
    3: /*top*/
    4: extern int t(void);
    5: int main(int argc, char **argv)
    6: {
    7: if (argc > 1000000) {
    8: printf("%p", &t);
    9: }
    10:
    11: return 0;
    12: }
    13: extern void PQsetSingleRowMode();
    14: int t(void) { PQsetSingleRowMode(); return 0; }
    /* end */

    前提として「less mkmf.log」コマンドを使用しているのですが、これでmkmf.logの内容を確認出来ているということでよろしいでしょうか。
    1つだけ「no」の表記になっている部分がございましたので、そこらか末尾まで記載いたしました。
    ご協力よろしくお願い申し上げます。

    キャンセル

回答 1

checkベストアンサー

0

エラーの原因: PostgreSQL のバージョンが古すぎる

使っている PostgreSQL のバージョンが 9.1.24 とのことですが、今の gem pg では 9.2 以降しかサポートしていません。

It works with PostgreSQL 9.2 and later.

https://github.com/ged/ruby-pg/ より引用)

9.2 から登場した PQsetSingleRowMode が必要なのですが、それが存在しないのでエラーになってるんだと思います。

修正案: PostgreSQL のバージョンを上げる

9.1 のサポートは 2016 年に切れているので、PostgreSQL のバージョンを上げるのが一番良いのではと思います。
各バージョンのサポート期限は下記URLから確認できます。

https://www.postgresql.org/support/versioning/

--

諸事情あって PostgreSQL のバージョンを上げられない場合は、また相談してください。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2020/03/24 10:55

    表題もつけて丁寧にご説明いただき、誠にありがとうございます。
    原因はおっしゃられていた通り、psqlのバージョンや、ひいてはubuntuのバージョンも古かったことが原因でした。
    改めて、有難うございました。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 89.10%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

同じタグがついた質問を見る