【问题标题】:Cannot install mysql2 gem on openshift scaled app无法在 openshift 缩放的应用程序上安装 mysql2 gem
【发布时间】:2015-09-27 23:10:38
【问题描述】:

我正在尝试在 rails 4/ruby 2.0 OpenShift 缩放应用程序上安装带有 ruby​​ 的 mysql2 gem。 但是,捆绑安装失败,尝试“gem install 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 开发库。抱歉,由于缺少信息而造成混乱。

【问题讨论】:

  • 你用的是什么电脑
  • 正如我所说,它是 OpenShift。 RedHat OpenShift 是 RedHat 的 PaaS,并且——您可能知道——使用 Linux 的 RedHat 发行版。
  • 您能否提供在执行 git push 时发生的捆绑安装错误,它使用您的应用程序中的 Gemfile.lock 文件?

标签: ruby-on-rails openshift


【解决方案1】:

在 Mac OS X 上,并且正在使用 Homebrew

brew install mysql

或者,如果您使用的是 Red Hat、CentOS 或其他使用 yum 的发行版:

sudo yum install mysql-devel

最后,如果您使用的是 Ubuntu 或 Debian 或其他使用 aptitude 的发行版:

sudo apt-get install libmysqlclient-dev

【讨论】:

  • 大体上是正确的。但在这种情况下没有帮助。如果你仔细阅读这个问题,它是关于 PaaS 的。 OpenShift 不允许执行包管理器(在这种情况下是 yum,我当然知道)。参见例如here
【解决方案2】:

好的,我终于做到了,我正在发布答案,以便其他人可以从中受益,以防他们遇到同样的问题。

这种行为的原因显然是之前 OpenShift 中的部署方法在中间中断,导致设备处于不一致状态(mysql2 gem 的问题是其中一个症状)。我基本上尝试做的是通过捆绑并从 git HEAD 重新构建手动将其恢复到一致状态。

这不起作用。

尝试从我的开发存储库推送到 gear git 也没有成功,因为与上次推送相比没有任何变化(这导致部署显然由于一些 OpenShift 内部错误而中断)。 我最后做了什么,我在包中做了一些改变(在我的例子中,bundle update 更新了一个 gem)和这个更新的 Gemfile.lock。 由于我还检查了“force_clean_build”标记,随后的推送从头开始重建了齿轮,也使其处于一致状态。

长话短说,如果 OpenShift 部署在中间中断,最好对源进行虚假更改并将其推送连同标记 force_clean_build 到设备的 git 而不是通过gear deploy HEAD 尝试手动重建,因为后者不会清理可能发生的不一致。

【讨论】:

    猜你喜欢
    • 2021-12-23
    • 2015-04-25
    • 2011-08-16
    • 2012-12-20
    • 2017-01-29
    • 2014-10-20
    • 2011-07-19
    相关资源
    最近更新 更多