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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Ruby on Rails 5

Ruby on Rails 5は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

PostgreSQL

PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

Q&A

解決済

1回答

2957閲覧

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

heiro

総合スコア5

Ruby on Rails 5

Ruby on Rails 5は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

PostgreSQL

PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

0グッド

2クリップ

投稿2020/03/11 02:13

バージョンーーーーーーーーーー
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'

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

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

SeieiMiyagi

2020/03/11 03:55

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

2020/03/12 01:00 編集

ご連絡いただきありがとうございます。 以下、終端の記述となります。 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」の表記になっている部分がございましたので、そこらか末尾まで記載いたしました。 ご協力よろしくお願い申し上げます。
guest

回答1

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/19 06:29

shinoharat

総合スコア1676

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

heiro

2020/03/24 01:55

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問