奧拉所有的聰明人。 我正面臨一個我正在嘗試解決但未能解決的問題。我試圖安裝pg gem在服務器上安裝有Omnibus Chef 012bpg寶石未能安裝在綜合廚師安裝
基本上這個問題已經有報道了(http://tickets.opscode.com/browse/COOK-1406)米尋找一個解決方案,如果有的話 - 解決方法建議從Opscode Ubuntu回購安裝軟件包 - 但那些與紅寶石1.8 - 我希望我不必再繼續爲什麼我不願意這樣做:)
安裝PG寶石時,我得到的錯誤是:
$ sudo /opt/chef/embedded/bin/gem install pg
Building native extensions. This could take a while...
ERROR: Error installing pg:
ERROR: Failed to build gem native extension.
/opt/chef/embedded/bin/ruby extconf.rb
checking for pg_config... yes
Using config values from /usr/bin/pg_config
checking for libpq-fe.h... yes
checking for libpq/libpq-fs.h... yes
checking for pg_config_manual.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
--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=/opt/chef/embedded/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 /opt/chef/embedded/lib/ruby/gems/1.9.1/gems/pg-0.14.1 for inspection.
Results logged to /opt/chef/embedded/lib/ruby/gems/1.9.1/gems/pg-0.14.1/ext/gem_make.out
在mkmf.log斷裂活動位是FO llows:
have_library: checking for PQconnectdb() in -lpq... -------------------- no
"gcc -o conftest -I/opt/chef/embedded/include/ruby-1.9.1/x86_64-linux -I/opt/chef/embedded/include/ruby-1.9.1/ruby/backward -I/opt/chef/embedded/include/ruby-1.9.1 -I. -I/opt/chef/embedded/include -I/usr/include/postgresql -I/opt/chef/embedded/include -fPIC conftest.c -L. -L/opt/chef/embedded/lib -Wl,-R/opt/chef/embedded/lib -L/opt/chef/embedded/lib -Wl,-R/opt/chef/embedded/lib -L. -Wl,-rpath,/opt/chef/embedded/lib -L/opt/chef/embedded/lib -rdynamic -Wl,-export-dynamic -L/usr/lib -Wl,-R -Wl,/opt/chef/embedded/lib -L/opt/chef/embedded/lib -lruby -lpq -lpthread -lrt -ldl -lcrypt -lm -lc"
/usr/lib/libpq.so: undefined reference to `[email protected]_1.0.0'
/usr/lib/libpq.so: undefined reference to `[email protected]_1.0.0'
/usr/lib/libpq.so: undefined reference to `[email protected]_1.0.0'
/usr/lib/libpq.so: undefined reference to `[email protected]_1.0.0'
/usr/lib/libpq.so: undefined reference to `[email protected]_1.0.0'
/usr/lib/libpq.so: undefined reference to `[email protected]_1.0.0'
/usr/lib/libpq.so: undefined reference to `[email protected]_1.0.0'
/usr/lib/libpq.so: undefined reference to `[email protected]_1.0.0'
/usr/lib/libpq.so: undefined reference to `[email protected]_1.0.0'
/usr/lib/libpq.so: undefined reference to `[email protected]_1.0.0'
/usr/lib/libpq.so: undefined reference to `[email protected]_1.0.0'
/usr/lib/libpq.so: undefined reference to `[email protected]_1.0.0'
/usr/lib/libpq.so: undefined reference to `[email protected]_1.0.0'
/usr/lib/libpq.so: undefined reference to `[email protected]_1.0.0'
/usr/lib/libpq.so: undefined reference to `[email protected]_1.0.0'
/usr/lib/libpq.so: undefined reference to `[email protected]_1.0.0'
/usr/lib/libpq.so: undefined reference to `[email protected]_1.0.0'
/usr/lib/libpq.so: undefined reference to `[email protected]_1.0.0'
/usr/lib/libpq.so: undefined reference to `[email protected]_1.0.0'
/usr/lib/libpq.so: undefined reference to `[email protected]_1.0.0'
/usr/lib/libpq.so: undefined reference to `[email protected]_1.0.0'
/usr/lib/libpq.so: undefined reference to `[email protected]_1.0.0'
/usr/lib/libpq.so: undefined reference to `[email protected]_1.0.0'
/usr/lib/libpq.so: undefined reference to `[email protected]_1.0.0'
/usr/lib/libpq.so: undefined reference to `[email protected]_1.0.0'
/usr/lib/libpq.so: undefined reference to `[email protected]_1.0.0'
/usr/lib/libpq.so: undefined reference to `[email protected]_1.0.0'
/usr/lib/libpq.so: undefined reference to `[email protected]_1.0.0'
/usr/lib/libpq.so: undefined reference to `[email protected]_1.0.0'
/usr/lib/libpq.so: undefined reference to `[email protected]_1.0.0'
/usr/lib/libpq.so: undefined reference to `[email protected]_1.0.0'
/usr/lib/libpq.so: undefined reference to `[email protected]_1.0.0'
/usr/lib/libpq.so: undefined reference to `[email protected]_1.0.0'
/usr/lib/libpq.so: undefined reference to `[email protected]_1.0.0'
/usr/lib/libpq.so: undefined reference to `[email protected]_1.0.0'
/usr/lib/libpq.so: undefined reference to `[email protected]_1.0.0'
/usr/lib/libpq.so: undefined reference to `[email protected]_1.0.0'
/usr/lib/libpq.so: undefined reference to `[email protected]_1.0.0'
/usr/lib/libpq.so: undefined reference to `[email protected]_1.0.0'
/usr/lib/libpq.so: undefined reference to `[email protected]_1.0.0'
collect2: ld returned 1 exit status
checked program was:
/* begin */
1: #include "ruby.h"
2:
3: #include <libpq-fe.h>
4:
5: /*top*/
6: int main() {return 0;}
7: int t() { void ((*volatile p)()); p = (void ((*)()))PQconnectdb; return 0; }
/* end */
"gcc -o conftest -I/opt/chef/embedded/include/ruby-1.9.1/x86_64-linux -I/opt/chef/embedded/include/ruby-1.9.1/ruby/backward -I/opt/chef/embedded/include/ruby-1.9.1 -I. -I/opt/chef/embedded/include -I/usr/include/postgresql -I/opt/chef/embedded/include -fPIC conftest.c -L. -L/opt/chef/embedded/lib -Wl,-R/opt/chef/embedded/lib -L/opt/chef/embedded/lib -Wl,-R/opt/chef/embedded/lib -L. -Wl,-rpath,/opt/chef/embedded/lib -L/opt/chef/embedded/lib -rdynamic -Wl,-export-dynamic -L/usr/lib -Wl,-R -Wl,/opt/chef/embedded/lib -L/opt/chef/embedded/lib -lruby -lpq -lpthread -lrt -ldl -lcrypt -lm -lc"
conftest.c: In function ‘t’:
conftest.c:7:1: error: too few arguments to function ‘PQconnectdb’
/usr/include/postgresql/libpq-fe.h:243:16: note: declared here
checked program was:
/* begin */
1: #include "ruby.h"
2:
3: #include <libpq-fe.h>
4:
5: /*top*/
6: int main() {return 0;}
7: int t() { PQconnectdb(); return 0; }
/* end */
--------------------
have_library: checking for PQconnectdb() in -llibpq... -------------------- no
"gcc -o conftest -I/opt/chef/embedded/include/ruby-1.9.1/x86_64-linux -I/opt/chef/embedded/include/ruby-1.9.1/ruby/backward -I/opt/chef/embedded/include/ruby-1.9.1 -I. -I/opt/chef/embedded/include -I/usr/include/postgresql -I/opt/chef/embedded/include -fPIC conftest.c -L. -L/opt/chef/embedded/lib -Wl,-R/opt/chef/embedded/lib -L/opt/chef/embedded/lib -Wl,-R/opt/chef/embedded/lib -L. -Wl,-rpath,/opt/chef/embedded/lib -L/opt/chef/embedded/lib -rdynamic -Wl,-export-dynamic -L/usr/lib -Wl,-R -Wl,/opt/chef/embedded/lib -L/opt/chef/embedded/lib -lruby -llibpq -lpthread -lrt -ldl -lcrypt -lm -lc"
/usr/bin/ld: cannot find -llibpq
collect2: ld returned 1 exit status
checked program was:
/* begin */
1: #include "ruby.h"
2:
3: #include <libpq-fe.h>
4:
5: /*top*/
6: int main() {return 0;}
7: int t() { void ((*volatile p)()); p = (void ((*)()))PQconnectdb; return 0; }
/* end */
"gcc -o conftest -I/opt/chef/embedded/include/ruby-1.9.1/x86_64-linux -I/opt/chef/embedded/include/ruby-1.9.1/ruby/backward -I/opt/chef/embedded/include/ruby-1.9.1 -I. -I/opt/chef/embedded/include -I/usr/include/postgresql -I/opt/chef/embedded/include -fPIC conftest.c -L. -L/opt/chef/embedded/lib -Wl,-R/opt/chef/embedded/lib -L/opt/chef/embedded/lib -Wl,-R/opt/chef/embedded/lib -L. -Wl,-rpath,/opt/chef/embedded/lib -L/opt/chef/embedded/lib -rdynamic -Wl,-export-dynamic -L/usr/lib -Wl,-R -Wl,/opt/chef/embedded/lib -L/opt/chef/embedded/lib -lruby -llibpq -lpthread -lrt -ldl -lcrypt -lm -lc"
conftest.c: In function ‘t’:
conftest.c:7:1: error: too few arguments to function ‘PQconnectdb’
/usr/include/postgresql/libpq-fe.h:243:16: note: declared here
checked program was:
/* begin */
1: #include "ruby.h"
2:
3: #include <libpq-fe.h>
4:
5: /*top*/
6: int main() {return 0;}
7: int t() { PQconnectdb(); return 0; }
/* end */
--------------------
have_library: checking for PQconnectdb() in -lms/libpq... -------------------- no
"gcc -o conftest -I/opt/chef/embedded/include/ruby-1.9.1/x86_64-linux -I/opt/chef/embedded/include/ruby-1.9.1/ruby/backward -I/opt/chef/embedded/include/ruby-1.9.1 -I. -I/opt/chef/embedded/include -I/usr/include/postgresql -I/opt/chef/embedded/include -fPIC conftest.c -L. -L/opt/chef/embedded/lib -Wl,-R/opt/chef/embedded/lib -L/opt/chef/embedded/lib -Wl,-R/opt/chef/embedded/lib -L. -Wl,-rpath,/opt/chef/embedded/lib -L/opt/chef/embedded/lib -rdynamic -Wl,-export-dynamic -L/usr/lib -Wl,-R -Wl,/opt/chef/embedded/lib -L/opt/chef/embedded/lib -lruby -lms/libpq -lpthread -lrt -ldl -lcrypt -lm -lc"
/usr/bin/ld: cannot find -lms/libpq
collect2: ld returned 1 exit status
checked program was:
/* begin */
1: #include "ruby.h"
2:
3: #include <libpq-fe.h>
4:
5: /*top*/
6: int main() {return 0;}
7: int t() { void ((*volatile p)()); p = (void ((*)()))PQconnectdb; return 0; }
/* end */
"gcc -o conftest -I/opt/chef/embedded/include/ruby-1.9.1/x86_64-linux -I/opt/chef/embedded/include/ruby-1.9.1/ruby/backward -I/opt/chef/embedded/include/ruby-1.9.1 -I. -I/opt/chef/embedded/include -I/usr/include/postgresql -I/opt/chef/embedded/include -fPIC conftest.c -L. -L/opt/chef/embedded/lib -Wl,-R/opt/chef/embedded/lib -L/opt/chef/embedded/lib -Wl,-R/opt/chef/embedded/lib -L. -Wl,-rpath,/opt/chef/embedded/lib -L/opt/chef/embedded/lib -rdynamic -Wl,-export-dynamic -L/usr/lib -Wl,-R -Wl,/opt/chef/embedded/lib -L/opt/chef/embedded/lib -lruby -lms/libpq -lpthread -lrt -ldl -lcrypt -lm -lc"
conftest.c: In function ‘t’:
conftest.c:7:1: error: too few arguments to function ‘PQconnectdb’
/usr/include/postgresql/libpq-fe.h:243:16: note: declared here
checked program was:
/* begin */
1: #include "ruby.h"
2:
3: #include <libpq-fe.h>
4:
5: /*top*/
6: int main() {return 0;}
7: int t() { PQconnectdb(); return 0; }
/* end */
--------------------
我認爲這個問題是PG寶石針對不同的LIB一個比PostgreSQL的反對,編譯失敗聯繫在一起。我只是想知道是否有什麼我可以做的解決這個問題? 任何驚人的聰明頭腦? 乾杯
這就是我們最終做的。但我們不喜歡這個,原因有兩個: 1.)每個Postgres升級意味着重新編譯 2.)在postgres食譜中獲得這個工作將需要很多的改變,並且通常會弄巧成拙。 儘管如此,謝謝你的回答 – gyre
是的,這是完全次優的。這只是一個問題,如果你想在Chef中使用pg gem,比如在Opscode的postgresql數據庫和用戶管理的數據庫食譜資源中。如果您僅在應用程序中使用pg,則不需要這樣做,只需在您的應用程序使用的Ruby下安裝gem(我們不建議在omnibus軟件包中使用Ruby)。 – jtimberman
也就是說,我們不推薦Chef的紅寶石爲您的應用程序,只爲廚師:-)。 – jtimberman