无法安装pg gem,“mkmf.rb无法找到ruby的头文件”(Mac OSX 10.6.5)
我刚刚升级到Rails 3,并对MacPorts,gem和数据库进行了一些混乱。 我扔掉了所有的gem并将它们安装得很新鲜。 除了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/ruby
, ruby -v
说ruby 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是什么我现在必须通过一些标志提供路径? 还是我完全出去吃午饭?
一般来说,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
安装了一个,所以它可能是由Snow Leopard预装的,或者我是在受到太多工作的影响下完成的,可能是使用了EnterpriseDB的Postgres安装程序。
找到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
程序的README
或INSTALL
文件,并查看需要设置的内容。 你将配置:
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运行正常,所以上面的信息可以帮到你。
当我尝试在CentOS 6.3上安装gem时遇到了这个错误。
谷歌搜索后,我找到了一个快速修复:安装ruby-devel包。
sudo yum install ruby-devel
在那之后,一切都很好。
这对我来说在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 – 这是另一种方法。
我今晚花了很多时间让它上class。 我看到了类似的错误:
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 gem。
它将保持默认版本(与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:
validation安装的版本:
$ 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
- ActiveRecord :: StatementInvalid,PG :: UndefinedTable错误,但生成的SQL有效
- 在ruby / ActiveRecord中生成类似Instagram或Youtube的不可语句字符串ID
- Rails Postgres架构问题 – 以下架构之一无效:“test”“public”
- Postgres查询来计算匹配的字符串
- 如何使“喜欢条款”不区分大小写
- PG :: ConnectionBad:FATAL:用户“alphauser”的密码validation失败
- Rails:创建一个drop table级联迁移
- 如何更改rails migration t.timestamps以在postgres中使用`timestamp(0)without timezone`
- Rails&Postgres:迁移到change_colomn会出现错误“无法转换为没有时区的类型时间戳”