Mac OS X 10.6でRailsにPostgreSQLをインストールしようとしています。最初にMacPortsのインストールを試みましたが、うまくいかなかったので、ワンクリックでDMGをインストールしました。うまくいったようです。
PostgreSQL開発パッケージをインストールする必要があると思いますが、OS Xでそれを行う方法がわかりません。
Sudo gem install pg
を実行しようとすると、次のようになります。
$ Sudo gem install pg
Building native extensions. This could take a while...
ERROR: Error installing pg:
ERROR: Failed to build gem native extension.
/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/bin/Ruby extconf.rb
checking for pg_config... yes
Using config values from /Library/PostgreSQL/8.3/bin/pg_config
checking for libpq-fe.h... yes
checking for libpq/libpq-fs.h... yes
checking for PQconnectdb() in -lpq... no
checking for PQconnectdb() in -llibpq... no
checking for PQconnectdb() in -lms/libpq... no
Can't find the PostgreSQL client library (libpq)
*** extconf.rb failed ***
Could not create Makefile due to some reason, probably lack of
necessary libraries and/or headers. Check the mkmf.log file for more
details. You may need configuration options.
Provided configuration options:
--with-opt-dir
--without-opt-dir
--with-opt-include
--without-opt-include=${opt-dir}/include
--with-opt-lib
--without-opt-lib=${opt-dir}/lib
--with-make-prog
--without-make-prog
--srcdir=.
--curdir
--Ruby=/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/bin/Ruby
--with-pg
--without-pg
--with-pg-dir
--without-pg-dir
--with-pg-include
--without-pg-include=${pg-dir}/include
--with-pg-lib
--without-pg-lib=${pg-dir}/lib
--with-pg-config
--without-pg-config
--with-pg_config
--without-pg_config
--with-pqlib
--without-pqlib
--with-libpqlib
--without-libpqlib
--with-ms/libpqlib
--without-ms/libpqlib
Gem files will remain installed in /Library/Ruby/Gems/1.8/gems/pg-0.11.0 for inspection.
Results logged to /Library/Ruby/Gems/1.8/gems/pg-0.11.0/ext/gem_make.out
解決策:PostgreSQLをHomebrewで再インストールしました。
$ Sudo su
$ env ARCHFLAGS="-Arch x86_64" gem install pg
Building native extensions. This could take a while...
Successfully installed pg-0.11.0
1 gem installed
Installing ri documentation for pg-0.11.0...
Installing RDoc documentation for pg-0.11.0...
働いた!
私はここで最高の回答を試しました:
env ARCHFLAGS="-Arch x86_64" gem install pg
しかし、再度バンドルインストールを実行しようとすると、同じエラーが発生しました。次に、ARCHFLAGSを使用してバンドル全体をインストールしてみました。
ARCHFLAGS="-Arch x86_64" bundle install
私のために働いた!使用しているアーキテクチャに応じて、x86_64をi386に置き換えてください。
EnterpiseDB .dmgを使用すると、この問題が発生していました。それがあなたが使用したのと同じだと思うなら、私は正しいアーキテクチャを指定することで動作するようにしました:
Sudo env ARCHFLAGS="-Arch i386" gem install pg
Webには、異なるアーキテクチャ(MacPortsを使用している人向けの「-Arch x86_64」など)を指定するように言ったチュートリアルがありますが、単一ファイルインストールを使用したため、機能しませんでした。
Yosemiteを使用している場合:
brew install postgres
次に:
ARCHFLAGS="-Arch x86_64" gem install pg
そして(optional)最後に、autovacuumを起動したい場合...
postgres -D /usr/local/var/postgres
たぶん、あなたはこれを試すことができます:
ARCHFLAGS="-Arch i386 -Arch x86_64" gem install pg
ライブラリのアーキテクチャを知るために使用できます
file /usr/local/lib/libpq.dylib
私の場合は1つのアーキテクチャしか提供していません(homebrew経由でインストール):
/usr/local/lib/libpq.dylib: Mach-O 64-bit dynamically linked shared library x86_64
適切な環境変数のプレフィックスを付けて、gem
を偽造します。 MacPortsからインストールする場合、次の手順を実行できるはずです。
% /opt/local/lib/postgresql91/bin/pg_config
BINDIR = /opt/local/lib/postgresql91/bin
DOCDIR = /opt/local/share/doc/postgresql
HTMLDIR = /opt/local/share/doc/postgresql
INCLUDEDIR = /opt/local/include/postgresql91
PKGINCLUDEDIR = /opt/local/include/postgresql91
INCLUDEDIR-SERVER = /opt/local/include/postgresql91/server
LIBDIR = /opt/local/lib/postgresql91
PKGLIBDIR = /opt/local/lib/postgresql91
LOCALEDIR = /opt/local/share/locale
MANDIR = /opt/local/share/man
SHAREDIR = /opt/local/share/postgresql91
SYSCONFDIR = /opt/local/etc/postgresql91
PGXS = /opt/local/lib/postgresql91/pgxs/src/makefiles/pgxs.mk
CONFIGURE = '--prefix=/opt/local' '--sysconfdir=/opt/local/etc/postgresql91' '--bindir=/opt/local/lib/postgresql91/bin' '--libdir=/opt/local/lib/postgresql91' '--includedir=/opt/local/include/postgresql91' '--datadir=/opt/local/share/postgresql91' '--mandir=/opt/local/share/man' '--with-includes=/opt/local/include' '--with-libraries=/opt/local/lib' '--with-openssl' '--with-bonjour' '--with-readline' '--with-zlib' '--with-libxml' '--with-libxslt' '--enable-thread-safety' '--enable-integer-datetimes' '--with-ossp-uuid' 'CC=/usr/bin/gcc-4.2' 'CFLAGS=-pipe -O2 -Arch x86_64' 'LDFLAGS=-L/opt/local/lib -Arch x86_64' 'CPPFLAGS=-I/opt/local/include -I/opt/local/include/ossp'
CC = /usr/bin/gcc-4.2
CPPFLAGS = -I/opt/local/include -I/opt/local/include/ossp -I/opt/local/include/libxml2 -I/opt/local/include
CFLAGS = -pipe -O2 -Arch x86_64 -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Wendif-labels -Wformat-security -fno-strict-aliasing -fwrapv
CFLAGS_SL =
LDFLAGS = -L/opt/local/lib -Arch x86_64 -L/opt/local/lib -L/opt/local/lib -Wl,-dead_strip_dylibs
LDFLAGS_EX =
LDFLAGS_SL =
LIBS = -lpgport -lxslt -lxml2 -lssl -lcrypto -lz -lreadline -lm
VERSION = PostgreSQL 9.1beta1
そこから、LIBDIR
、INCLUDEDIR
、CPPFLAGS
、LIBS
、およびLDFLAGS
(私があなたを走らせると思うのはLIBDIR
、 しかしながら)。次に実行します:
setenv PATH /opt/local/lib/postgresql91/bin:${PATH}
Sudo env LDFLAGS=-L`pg_config --libdir` CPPFLAGS=`pg_config --cppflags` gem install pg
それはあなたのためにそれを行う必要があります。そうでない場合は教えてください。
私たちが抱えていた問題はかなり奇妙でした。
Ruby -v # was ok (rbenv)
gem -v # was ok (rbenv)
しかし、実際にバンドルインストールを行ったとき、rbenvによってインストールされたRubyのバージョンに対してbundlerはインストールされなかったため、bundle installと入力すると、システムのbundlerが使用されました。
したがって、バンドルインストールを実行する前に、次を実行してバンドラーをインストールしてください。
gem install bundler
Postgres開発ファイルは必要ないと思います。必要なものはすべてインストーラーに含まれているはずです。インストール先のパスが環境パスにない可能性が高いため、pgをコンパイルしようとしたときにgemがそれらを見つけることができません。
gem install pg
をルートとして実行する必要はありません。実際に実行する場合、PATH(Sudoで実行する場合はルートのPATH)に必要な情報が含まれていない可能性があります。
以下は通常私のために働く:
# Might be different depending on where your installer installed postgres 8.3
export PATH=$PATH:/Library/PostgreSQL/8.3/include/
export ARCHFLAGS='-Arch x86_64'
gem install pg
これは最終的に私のためにやったことです(他の投稿と一緒に以前に提供された複数のソリューションの組み合わせ):
$ Sudo env ARCHFLAGS = "-Arch x86_64" gem install pg-with-pg-include =/Library/PostgreSQL/9.6/include /
どうにかして64ビットバージョンのpostgres(homebrewがインストールされます)と32ビットバージョンのRubyになった場合、他の人が提案したARCHFLAGS
回答は機能しません。何らかの理由でrbenv
はRuby 1.9.2-p290を32ビットとしてビルドすることを要求しているため、64ビットのpostgresとリンクすることはできません。
Rubyバイナリのアーキテクチャを確認してください
file `which Ruby`
またはrbenvを使用している場合
file `rbenv which Ruby`
そして、あなたのpostgresと比較してください:
file `which postgres`
不一致がある場合は、postgresまたはRubyを再インストールする必要があります。 rbenvを使用して、別のバージョン1.9.3-p194
ではなく1.9.2-p290
に切り替えるだけでこれを解決しました。
だから基本的に私はこれをやった;-)
brew install postgres
これは私がマーベリックスで動作するようにした方法です。注:homebrewからpostgresql 9.3をインストール済みです。
App StoreからXcodeを5.0に更新する
コマンドライン開発者ツールをインストールする
xcode-select --install
Xcodeライセンスに同意する
Sudo xcodebuild -license
Gemをインストールする
ARCHFLAGS = "-Arch x86_64" gem install pg
私はおそらくここでのパーティーに少し遅れていますが、私の場合は、rbenvを使用してRuby 2.2.3にアップグレードしていました。私は私のBundlerをインストールして動作させる必要がありました。古いシステムバージョンがありました。
gem install bundler
Macでは、これを試すことができます(私のために動作します):gem install pg-with-pg-include =/Library/PostgreSQL/9.5/includeフェッチ:pg-1.0.0.gem(100%)ネイティブ拡張の構築: ' with-pg-include =/Library/PostgreSQL/9.5/include 'これにはしばらく時間がかかる可能性があります... pg-1.0.0のインストールに成功しましたpg-1.0.0のドキュメントの解析pg-1.0.0のriドキュメントのインストールドキュメントのインストールを完了しましたpgの場合、3秒後に1つのgemがインストールされます
(この部分「/Library/PostgreSQL/9.5/include」には、Postgresパスを配置する必要があります)
上記のように、これはrbenvに2つのRubyアーチを持っているという事実と関係があります/usr/bin/Ruby: Mach-O universal binary with 2 architectures: [x86_64:Mach-O 64-bit executable x86_64] [i386:Mach-O executable i386]
私がしなければならなかったのはpg
gemをx86_64
Archこのコマンドで使用します:
Sudo env ARCHFLAGS="-Arch x86_64" gem install pg
bash_profile
が最新であることを忘れないでください
Postgresのパスを追加します。この場合、OSX
( https://postgresapp.com/ )の代わりにPostgresアプリ(brew
)を使用しています。これはデフォルトですロケーション:
export PATH=/Applications/Postgres.app/Contents/Versions/10/bin:$PATH
Bashをリロードします
Sudo vi ~/.bash_profile
これを実行した後、私はついにpg gem
を正常にインストールすることができました
お役に立てれば!