2015-09-27 44 views
-1

我想安裝mysql2寶石與紅寶石在軌道上4 /紅寶石2.0 OpenShift縮放應用程序。 但是,捆綁安裝失敗,試圖「寶石安裝mysql2」,這導致了以下錯誤:不能在openshift縮放應用程序安裝mysql2寶石

gem install mysql2 
Fetching: mysql2-0.4.1.gem (100%) 
Building native extensions. This could take a while... 
ERROR: Error installing mysql2: 
    ERROR: Failed to build gem native extension. 

    /opt/rh/ruby200/root/usr/bin/ruby extconf.rb 
checking for ruby/thread.h... yes 
checking for rb_thread_call_without_gvl() in ruby/thread.h... yes 
checking for rb_thread_blocking_region()... yes 
checking for rb_wait_for_single_fd()... yes 
checking for rb_hash_dup()... yes 
checking for rb_intern3()... yes 
----- 
Using mysql_config at /opt/rh/mysql55/root/usr/bin/mysql_config 
----- 
checking for mysql.h... yes 
checking for errmsg.h... yes 
checking for mysqld_error.h... yes 
----- 
Don't know how to set rpath on your system, if MySQL libraries are not in path mysql2 may not load 
----- 
----- 
Setting libpath to /opt/rh/mysql55/root/usr/lib64/mysql 
----- 
creating Makefile 

make "DESTDIR=" 
gcc -I. -I/opt/rh/ruby200/root/usr/include -I/opt/rh/ruby200/root/usr/include/ruby/backward -I/opt/rh/ruby200/root/usr/include -I. -I/opt/rh/mysql55/root/usr/include/mysql -DHAVE_RUBY_THREAD_H -DHAVE_RB_THREAD_CALL_WITHOUT_GVL -DHAVE_RB_THREAD_BLOCKING_REGION -DHAVE_RB_WAIT_FOR_SINGLE_FD -DHAVE_RB_HASH_DUP -DHAVE_RB_INTERN3 -DHAVE_MYSQL_H -DHAVE_ERRMSG_H -DHAVE_MYSQLD_ERROR_H -fPIC -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -mtune=generic -fPIC -m64 -o client.o -c client.c 
gcc -I. -I/opt/rh/ruby200/root/usr/include -I/opt/rh/ruby200/root/usr/include/ruby/backward -I/opt/rh/ruby200/root/usr/include -I. -I/opt/rh/mysql55/root/usr/include/mysql -DHAVE_RUBY_THREAD_H -DHAVE_RB_THREAD_CALL_WITHOUT_GVL -DHAVE_RB_THREAD_BLOCKING_REGION -DHAVE_RB_WAIT_FOR_SINGLE_FD -DHAVE_RB_HASH_DUP -DHAVE_RB_INTERN3 -DHAVE_MYSQL_H -DHAVE_ERRMSG_H -DHAVE_MYSQLD_ERROR_H -fPIC -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -mtune=generic -fPIC -m64 -o infile.o -c infile.c 
gcc -I. -I/opt/rh/ruby200/root/usr/include -I/opt/rh/ruby200/root/usr/include/ruby/backward -I/opt/rh/ruby200/root/usr/include -I. -I/opt/rh/mysql55/root/usr/include/mysql -DHAVE_RUBY_THREAD_H -DHAVE_RB_THREAD_CALL_WITHOUT_GVL -DHAVE_RB_THREAD_BLOCKING_REGION -DHAVE_RB_WAIT_FOR_SINGLE_FD -DHAVE_RB_HASH_DUP -DHAVE_RB_INTERN3 -DHAVE_MYSQL_H -DHAVE_ERRMSG_H -DHAVE_MYSQLD_ERROR_H -fPIC -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -mtune=generic -fPIC -m64 -o mysql2_ext.o -c mysql2_ext.c 
gcc -I. -I/opt/rh/ruby200/root/usr/include -I/opt/rh/ruby200/root/usr/include/ruby/backward -I/opt/rh/ruby200/root/usr/include -I. -I/opt/rh/mysql55/root/usr/include/mysql -DHAVE_RUBY_THREAD_H -DHAVE_RB_THREAD_CALL_WITHOUT_GVL -DHAVE_RB_THREAD_BLOCKING_REGION -DHAVE_RB_WAIT_FOR_SINGLE_FD -DHAVE_RB_HASH_DUP -DHAVE_RB_INTERN3 -DHAVE_MYSQL_H -DHAVE_ERRMSG_H -DHAVE_MYSQLD_ERROR_H -fPIC -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -mtune=generic -fPIC -m64 -o result.o -c result.c 
gcc -I. -I/opt/rh/ruby200/root/usr/include -I/opt/rh/ruby200/root/usr/include/ruby/backward -I/opt/rh/ruby200/root/usr/include -I. -I/opt/rh/mysql55/root/usr/include/mysql -DHAVE_RUBY_THREAD_H -DHAVE_RB_THREAD_CALL_WITHOUT_GVL -DHAVE_RB_THREAD_BLOCKING_REGION -DHAVE_RB_WAIT_FOR_SINGLE_FD -DHAVE_RB_HASH_DUP -DHAVE_RB_INTERN3 -DHAVE_MYSQL_H -DHAVE_ERRMSG_H -DHAVE_MYSQLD_ERROR_H -fPIC -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -mtune=generic -fPIC -m64 -o statement.o -c statement.c 
rm -f mysql2.so 
gcc -shared -o mysql2.so client.o infile.o mysql2_ext.o result.o statement.o -L. -L/opt/rh/ruby200/root/usr/lib64 -L/opt/rh/mysql55/root/usr/lib64/mysql -L. -fstack-protector -rdynamic -Wl,-export-dynamic -m64 -lruby -L/opt/rh/mysql55/root/usr/lib64/mysql -lmysqlclient -lpthread -lz -lm -lrt -lssl -lcrypto -ldl -lpthread -lrt -ldl -lcrypt -lm -lc 
/usr/bin/ld: cannot find -lmysqlclient 
collect2: ld returned 1 exit status 
make: *** [mysql2.so] Error 1 


Gem files will remain installed in /var/lib/openshift/541424415004469f3a000b85/.gem/gems/mysql2-0.4.1 for inspection. 
Results logged to /var/lib/openshift/541424415004469f3a000b85/.gem/gems/mysql2-0.4.1/ext/mysql2/gem_make.out 

的MySQL庫/ SDK都應該保持/ Redhat中的PaaS產品提供,所以我有點卡住了。有趣的是,直到今天晚上,它運行良好。

編輯: 第一個答案顯示,我錯過了一個重要的問題。在OpenShift中,沒有root權限訪問設備,所以我無法執行yum install,如下所示。它確實是一個OpenShift特定問題,不是一般的問題。我當然知道如何安裝MySQL開發庫。抱歉,由於缺少一條信息而導致混亂。

+0

你正在使用什麼樣的電腦 –

+0

正如我所說的,它是OpenShift。 RedHat OpenShift是RedHat的PaaS,你可能知道它使用Linux的RedHat發行版。 –

+0

您可以提供在執行git push時發生的軟件包安裝中的錯誤,它會在您的應用程序中使用您的Gemfile.lock文件? – 2015-09-28 15:25:31

回答

0

好吧,我終於做到了,並我發佈了答案,以便其他人可以從中受益,以防他們遇到同樣的問題。

行爲的原因很明顯,以前的OpenShift部署方法在中間打破,這使得設備處於不一致的狀態(mysql2 gem的問題就是其中一個症狀)。我基本上試圖做的是通過捆綁和從git HEAD重新構建來手動恢復到一致狀態。

這沒有奏效。

嘗試從我的開發存儲庫推入設備git也不起作用,因爲上次推送沒有發生任何變化(導致顯然由於某些OpenShift內部錯誤導致部署失敗)。 最後我做了些什麼,我在包中更改了一些(在我的例子中更新了一個寶石bundle update)和這個更新的Gemfile.lock。 由於我還檢查了「force_clean_build」標記,隨後的推動從頭開始重新設置了齒輪,並且使其達到了一致的狀態。

長話短說,如果在中間OpenShift部署休息,它是更好的做的來源是假的變化和推動他們結合標記force_clean_build到齒輪的混帳,而不是試圖重建手動gear deploy HEAD,因爲後者不清理可能發生的不一致。

1

在Mac OS X,並使用Homebrew

brew install mysql 

,或者如果你是在Red Hat或CentOS的或其他的分佈用yum:

sudo yum install mysql-devel 

最後,如果你」在Ubuntu或Debian或者其他分派重複使用的傾向:

sudo apt-get install libmysqlclient-dev 
+0

一般正確。但在這種情況下不起作用。如果你仔細閱讀這個問題,這是關於PaaS的。OpenShift不允許執行包管理器(在這種情況下,yum,這當然是我知道的)。例如見[這裏](http://stackoverflow.com/questions/23985470/can-dependencies-be-installed-with-yum-in-openshift-action-hooks-build)。 –