簡體   English   中英

無法安裝pg gem,“mkmf.rb無法找到ruby的頭文件”(Mac OSX 10.6.5)

[英]Failing installing pg gem, “mkmf.rb can't find header files for ruby” (Mac OSX 10.6.5)

我剛剛升級到Rails 3並且對MacPorts,寶石和數據庫進行了一些混亂。 我拋棄了所有的寶石並將它們安裝得很新鮮。 除了pg gem的要求外,一切似乎都沒問題。

創建一個為PostgreSQL准備的新Rails 3項目后,服務器無法啟動,抱怨丟失的pg gem。 bundle install ,它會拖延一段時間,當然,在pg gem上失敗了。

Installing pg (0.10.0) with native extensions /Library/Ruby/Site/1.8/rubygems/installer.rb:483:in `build_extensions': ERROR: Failed to build gem native extension. (Gem::Installer::ExtensionBuildError)

/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/bin/ruby extconf.rb 
mkmf.rb can't find header files for ruby at /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/ruby.h


Gem files will remain installed in /Library/Ruby/Gems/1.8/gems/pg-0.10.0 for inspection.
Results logged to /Library/Ruby/Gems/1.8/gems/pg-0.10.0/ext/gem_make.out
    from /Library/Ruby/Site/1.8/rubygems/installer.rb:446:in `each'
    from /Library/Ruby/Site/1.8/rubygems/installer.rb:446:in `build_extensions'
    from /Library/Ruby/Site/1.8/rubygems/installer.rb:198:in `install'
    from /Library/Ruby/Gems/1.8/gems/bundler-1.0.7/lib/bundler/source.rb:95:in `install'
    from /Library/Ruby/Gems/1.8/gems/bundler-1.0.7/lib/bundler/installer.rb:55:in `run'
    from /Library/Ruby/Gems/1.8/gems/bundler-1.0.7/lib/bundler/spec_set.rb:12:in `each'
    from /Library/Ruby/Gems/1.8/gems/bundler-1.0.7/lib/bundler/spec_set.rb:12:in `each'
    from /Library/Ruby/Gems/1.8/gems/bundler-1.0.7/lib/bundler/installer.rb:44:in `run'
    from /Library/Ruby/Gems/1.8/gems/bundler-1.0.7/lib/bundler/installer.rb:8:in `install'
    from /Library/Ruby/Gems/1.8/gems/bundler-1.0.7/lib/bundler/cli.rb:225:in `install'
    from /Library/Ruby/Gems/1.8/gems/bundler-1.0.7/lib/bundler/vendor/thor/task.rb:22:in `send'
    from /Library/Ruby/Gems/1.8/gems/bundler-1.0.7/lib/bundler/vendor/thor/task.rb:22:in `run'
    from /Library/Ruby/Gems/1.8/gems/bundler-1.0.7/lib/bundler/vendor/thor/invocation.rb:118:in `invoke_task'
    from /Library/Ruby/Gems/1.8/gems/bundler-1.0.7/lib/bundler/vendor/thor.rb:246:in `dispatch'
    from /Library/Ruby/Gems/1.8/gems/bundler-1.0.7/lib/bundler/vendor/thor/base.rb:389:in `start'
    from /Library/Ruby/Gems/1.8/gems/bundler-1.0.7/bin/bundle:13
    from /usr/bin/bundle:19:in `load'
    from /usr/bin/bundle:19

我在論壇和博客上發現的最常見的建議是(重新)安裝XCode開發人員工具。 他們已經在那里,但無論如何我重新安裝它們,沒有比上面更好的結果。

which ruby/usr/bin/rubyruby -vruby 1.8.7 (2009-06-12 patchlevel 174) [universal-darwin10.0] ,如果有任何線索那里。

指針是受歡迎的。 任何遺漏的信息都有助於搞清楚這一點,我很樂意並及時提供!


我下載了XCode,因為據說DVD版本已經壞了,而且事情會好一段時間。 bundle install開始談論“archflags”,所以我做了:

sudo env ARCHFLAGS="-arch i386" bundle install

事情似乎沒事,直到開始Rails禁止,說:

/Library/Ruby/Gems/1.8/gems/pg-0.10.0/lib/pg_ext.bundle: dlopen(/Library/Ruby/Gems/1.8/gems/pg-0.10.0/lib/pg_ext.bundle, 9): no suitable image found.  Did find: (LoadError)
    /Library/Ruby/Gems/1.8/gems/pg-0.10.0/lib/pg_ext.bundle: mach-o, but wrong architecture - /Library/Ruby/Gems/1.8/gems/pg-0.10.0/lib/pg_ext.bundle

抓住任何東西,我嘗試使用設置為-arch -arch x86_64 archflags進行bundle install ,但是進展不順利:

*** Your PostgreSQL installation doesn't seem to have an architecture in common with the running ruby interpreter ([] vs. ["x86_64"])
I'll continue anyway, but if it fails, try setting ARCHFLAGS.
[...]
Can't find the PostgreSQL client library (libpq)
*** extconf.rb failed ***

libpq是什么我現在必須提供通過一些標志的路徑? 還是我完全出去吃午飯?

當我嘗試在CentOS 6.3上安裝gem時遇到了這個錯誤。

谷歌搜索后,我找到了一個快速修復:安裝ruby-devel包。

sudo yum install ruby-devel

在那之后,一切都很好。

通常,Postgres的gem包想知道pg_config隱藏在哪里,所以他們可以詢問Postgres的安裝情況。

使用locate pg_config查看您的Mac是否知道它隱藏的位置。

我使用mappstack安裝了Postgres的副本,所以我的Mac上有一份副本:

/Applications/mappstack-1.2-3/postgresql/bin/pg_config

另一個在:

/Library/PostgreSQL/9.0/bin/pg_config

我不記得安裝一個在/Library/PostgreSQL/9.0 ,所以它可能已經被雪豹預裝,或者我做了太多的工作的影響時,可能使用從Postgres的安裝EnterpriseDB公司

找到pg_config的位置后,嘗試將該目錄添加到PATH的開頭,然后重新運行gem install。 或使用:

export SQL_PATH=/Library/PostgreSQL/9.0
gem install pg -- --with-pg-config=$SQL_PATH/bin/pg_config

並嘗試安裝。 如果其中任何一個工作你就完成了。 除此以外...

安裝程序可能想要的下一件事是訪問Postgres頭文件,因此您查看bin目錄的父目錄,並查看是否可以找到include目錄。

之后,在該目錄中查找lib目錄。 一旦了解了這些位置,就應該擁有設置環境變量以完成安裝程序所需的全部工作。 您需要閱讀INSTALL程序的READMEINSTALL文件,並查看需要設置的內容。 你將配置:

export include_dir=$SQL_PATH/include/
export     lib_dir=$SQL_PATH/lib/
gem install pg -- --with-pgsql-include-dir=$include_dir --with-pgsql-lib-dir=$lib_dir

希望這一切都有所幫助。 我使用mappstack Postgres和EnterpriseDB版本運行Rails 3和我的Postgres運行正常,所以上面的信息可以幫到你。

這對我來說在OS X 10.6.6上運行,從源代碼安裝了PostgreSQL 9.0.1:

export PATH=/usr/local/psql/bin:$PATH
export ARCHFLAGS='-arch x86_64'
gem install pg

您可能需要編輯該PATH以匹配您的postgres安裝位置。

我通過macports安裝了postgres 1.9.0。 OS X 10.5 PPC

這對我有用:

gem install pg -- --with-pg-lib=/opt/local/lib/postgresql90 --with-pg-include=/opt/local/include/postgresql90

祝好運!

通常,Postgres的gem包想知道pg_config隱藏在哪里。

對 - 這可能是訣竅。 如果您剛剛安裝了PostgreSQL並將其添加到您的路徑中,並在舊shell中進行了“捆綁安裝”,則無法找到pg_config。 如果是這種情況,只需獲取一個新shell並再試一次。 否則,請按照上面的步驟找到它並通過bundler查看。

postgresql83的macports安裝工作正常,開箱即用可以很好地使用rails - 這是另一種方法。

我今晚花了很多時間讓它上班。 我看到了類似的錯誤:

Can't find the PostgreSQL client library (libpq)
*** extconf.rb failed ***

我嘗試了不同的gem安裝變體:

gem install pg -- --with-pg-config=/Library/PostgreSQL/9.1/bin/ --with-pg-lib=/Library/PostgreSQL/9.1/lib/ --with-pg-include=/Library/PostgreSQL/9.1/include/

但最后對我有用的是:

gem install pg -- --with-pg-dir=/Library/PostgreSQL/9.1/

此外,在此之前我更新了rvm(rvm get head)並重新安裝了ruby(rvm --force install 1.9.2)。 不確定這是否有幫助,但如果你仍然遇到問題,可能值得嘗試

你可能想嘗試使用自制軟件來安裝postgres( brew install postgres )和Ruby Version Manager來安裝和維護ruby和ruby gems。

它將保持默認版本(與OSX一起安裝)不變,並為您提供更大的靈活性。 例如,你可以使用rails 2或3的不同rails應用程序,ruby 1.8.7和1.9.2都安裝在同一系統上而沒有任何問題。

這對我有用:

sudo env ARCHFLAGS="-arch x86_64" gem install pg

對於我來說,這里和網絡上的所有建議都是不完整的,直到我在CentOS 6.6上運行以下內容:

wget -c ftp://mirror.switch.ch/pool/4/mirror/scientificlinux/6.3/x86_64/updates/security/kernel-devel-2.6.32-504.1.3.el6.x86_64.rpm && sudo yum install kernel-devel-2.6.32-504.1.3.el6.x86_64.rpm
wget -c ftp://mirror.switch.ch/pool/4/mirror/scientificlinux/6.6/x86_64/updates/security/kernel-headers-2.6.32-504.30.3.el6.x86_64.rpm && sudo yum install kernel-headers-2.6.32-504.30.3.el6.x86_64.rpm
sudo yum groupinstall "Development Tools" "Development Libraries" 
sudo yum -y install gcc gcc-c++ git ruby ruby-devel rubygems libvirt-devel mysql-devel postgresql-devel openssl-devel libxml2-devel sqlite-devel libxslt-devel zlib-devel readline-devel tar make automake autoconf curl-devel openssl-devel zlib-devel httpd-devel apr-devel apr-util-devel sqlite-devel ruby193-ruby-doc ruby193-ruby-devel ruby193-build
curl -L get.rvm.io | bash -s stable && source $HOME/.rvm/scripts/rvm && rvm requirements

安裝Postgres.app:

http://postgresapp.com/

驗證安裝的版本:

$ ls /Library/PostgreSQL/
# 9.4

導出SQL_PATH

export SQL_PATH=/Library/PostgreSQL/9.4

安裝pg

gem install pg -- --with-pg-config=$SQL_PATH/bin/pg_config

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM