【问题标题】:Bundle install fails on mysql gem in scaled OpenShift Online application捆绑安装在扩展的 OpenShift Online 应用程序中的 mysql gem 上失败
【发布时间】:2014-12-12 20:48:34
【问题描述】:

当我对 OpenShift Online 执行 git push 时,我似乎不知道如何解决这个捆绑安装错误(在 mysql gem 上)。当它到达 mysql gem 时,我在执行 make 时收到错误“找不到 -lmysqlclient”(见下文)。

我在 OpenShift Online 上使用 MySQL5.5 创建了一个简单的(从快速入门开始)可扩展 Rails 4 应用程序。我将 RAILS_ENV 设置为“开发”并强制进行干净构建。

bundle install 进入 mysql gem 时出现错误,该错误仅在应用程序缩放且 RAILS_ENV = 'development' 时发生。 p>

当我创建与未缩放相同的应用程序(Rails 4 和 MySQL 5.5)并设置 RAILS_ENV = 'development' 时,它工作正常。但我必须使用“缩放”的应用程序来公开我的 Iron.io 工作人员可以连接的数据库主机,以查找用户和其他信息。

注意:当 RAILS_ENV = 'production' 时它工作正常,但我将在 OpenShift Online 上运行多个特定于环境的应用程序版本(例如 app-dev、app-stg、app),这就是为什么我需要将 RAILS_ENV 设置为“开发”。

我在 .openshift/markers 下有一个 force_clean_build 标记。

这是我在 .openshift/action_hooks/pre_build 中的代码:

#!/bin/bash
# This is a simple script and will be executed on your CI system if
# available.  Otherwise it will execute while your application is stopped
# before the build step.  This script gets executed directly, so it
# could be python, php, ruby, etc.

if [[ "$RUBY_VERSION" == "1.8" ]]; then
  echo "ERROR: This quickstart is not compatible with Ruby 1.8"
  echo "ERROR: Please use ruby-1.9 or ruby-2.0 application type."
  exit 1
fi

source $OPENSHIFT_CARTRIDGE_SDK_BASH
source ${OPENSHIFT_RUBY_DIR}/lib/ruby_context

set -e

pushd ${OPENSHIFT_REPO_DIR} > /dev/null

if [[ -f .openshift/markers/force_clean_build && ( "$RAILS_ENV" == "development" || "$RAILS_ENV" == "staging" ) ]]
then
  echo "bundle install --deployment --path ${OPENSHIFT_HOMEDIR}app-root/repo/vendor/bundle"
  ruby_with_nodejs_context "bundle install --deployment --path ${OPENSHIFT_HOMEDIR}app-root/repo/vendor/bundle"
fi

popd > /dev/null

这是我执行“git push”时发生的日志:

remote: Ruby cartridge in development mode, skipping stop...
remote: Repairing links for 1 deployments
remote: Syncing git content to other proxy gears
remote: Force clean build enabled - cleaning dependencies
remote: Building git ref 'master', commit bc3ac62
remote: bundle install --deployment --path /var/lib/openshift/548b3d09fcf933241c0001b6/app-root/repo/vendor/bundle
remote: Fetching gem metadata from https://rubygems.org/.........
remote: Installing rake (0.9.6) 
remote: Installing i18n (0.6.11) 
remote: Installing json (1.8.1) 
remote: Installing minitest (5.4.3) 
remote: Installing thread_safe (0.3.4) 
remote: Installing tzinfo (1.2.2) 
remote: Installing activesupport (4.1.4) 
remote: Installing builder (3.2.2) 
remote: Installing erubis (2.7.0) 
remote: Installing actionview (4.1.4) 
remote: Installing rack (1.5.2) 
remote: Installing rack-test (0.6.2) 
remote: Installing actionpack (4.1.4) 
remote: Installing mime-types (1.25.1) 
remote: Installing polyglot (0.3.5) 
remote: Installing treetop (1.4.15) 
remote: Installing mail (2.5.4) 
remote: Installing actionmailer (4.1.4) 
remote: Installing activemodel (4.1.4) 
remote: Installing arel (5.0.1.20140414130214) 
remote: Installing activerecord (4.1.4) 
remote: Installing coffee-script-source (1.8.0) 
remote: Installing execjs (2.2.2) 
remote: Installing coffee-script (2.3.0) 
remote: Installing thor (0.19.1) 
remote: Installing railties (4.1.4) 
remote: Installing coffee-rails (4.0.1) 
remote: Installing hike (1.2.3) 
remote: Installing multi_json (1.10.1) 
remote: Installing jbuilder (2.2.5) 
remote: Installing jquery-rails (3.1.2) 
remote: Installing mysql2 (0.3.17) 
remote: Gem::Installer::ExtensionBuildError: ERROR: Failed to build gem native extension.
remote: 
remote:     /opt/rh/ruby200/root/usr/bin/ruby extconf.rb 
remote: checking for ruby/thread.h... yes
remote: checking for rb_thread_call_without_gvl() in ruby/thread.h... yes
remote: checking for rb_thread_blocking_region()... yes
remote: checking for rb_wait_for_single_fd()... yes
remote: checking for rb_hash_dup()... yes
remote: checking for rb_intern3()... yes
remote: -----
remote: Using mysql_config at /opt/rh/mysql55/root/usr/bin/mysql_config
remote: -----
remote: checking for mysql.h... yes
remote: checking for errmsg.h... yes
remote: checking for mysqld_error.h... yes
remote: -----
remote: Don't know how to set rpath on your system, if MySQL libraries are not in path mysql2 may not load
remote: -----
remote: -----
remote: Setting libpath to /opt/rh/mysql55/root/usr/lib64/mysql
remote: -----
remote: creating Makefile
remote: 
remote: make "DESTDIR="
remote: 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
remote: 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
remote: 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
remote: 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
remote: rm -f mysql2.so
remote: gcc -shared -o mysql2.so client.o infile.o mysql2_ext.o result.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
remote: /usr/bin/ld: cannot find -lmysqlclient
remote: collect2: ld returned 1 exit status
remote: make: *** [mysql2.so] Error 1
remote: 
remote: 
remote: Gem files will remain installed in /var/lib/openshift/548b3d09fcf933241c0001b6/app-root/repo/vendor/bundle/ruby/gems/mysql2-0.3.17 for inspection.
remote: Results logged to /var/lib/openshift/548b3d09fcf933241c0001b6/app-root/repo/vendor/bundle/ruby/gems/mysql2-0.3.17/ext/mysql2/gem_make.out
remote: An error occurred while installing mysql2 (0.3.17), and Bundler cannot continue.
remote: Make sure that `gem install mysql2 -v '0.3.17'` succeeds before bundling.
remote: An error occurred executing 'gear postreceive' (exit code: 5)
remote: Error message: CLIENT_ERROR: Failed to execute action hook 'pre_build' for 548b3d09fcf933241c0001b6 application rorscaled
remote: 
remote: For more details about the problem, try running the command again with the '--trace' option.
To ssh://548b3d09fcf933241c0001b6@rorscaled-pervasivio.rhcloud.com/~/git/rorscaled.git/
   3d4699e..bc3ac62  master -> master

此缩放应用程序的 OpenShift Online MYSQL 环境变量,以及该应用程序的相同未缩放版本。

SCALED -----

OPENSHIFT_MYSQL_DB_GEAR_DNS=548b3d09fcf933241c0001b7-pervasivio.rhcloud.com
OPENSHIFT_MYSQL_DB_GEAR_UUID=548b3d09fcf933241c0001b7
OPENSHIFT_MYSQL_DB_HOST=548b3d09fcf933241c0001b7-pervasivio.rhcloud.com
OPENSHIFT_MYSQL_DB_PORT=37891
OPENSHIFT_MYSQL_DB_URL=mysql://adminHucinW7:yVMbdWxil46k@548b3d09fcf933241c0001b7-pervasivio.rhcloud.com:37891/
OPENSHIFT_MYSQL_LD_LIBRARY_PATH_ELEMENT=/opt/rh/mysql55/root/usr/lib64
OPENSHIFT_MYSQL_PATH_ELEMENT=/opt/rh/mysql55/root/usr/bin

UNSCALED -----

OPENSHIFT_MYSQL_DB_HOST=127.4.220.2
OPENSHIFT_MYSQL_DB_LOG_DIR=/var/lib/openshift/548b2e04e0b8cd0f2800005a/app-root/logs/
OPENSHIFT_MYSQL_DB_PORT=3306
OPENSHIFT_MYSQL_DB_SOCKET=/var/lib/openshift/548b2e04e0b8cd0f2800005a/mysql//socket/mysql.sock
OPENSHIFT_MYSQL_DB_URL=mysql://adminbZ743Ky:PnvGtW7CfScB@127.4.220.2:3306/
OPENSHIFT_MYSQL_DIR=/var/lib/openshift/548b2e04e0b8cd0f2800005a/mysql/
OPENSHIFT_MYSQL_IDENT=redhat:mysql:5.5:0.2.19
OPENSHIFT_MYSQL_LD_LIBRARY_PATH_ELEMENT=/opt/rh/mysql55/root/usr/lib64
OPENSHIFT_MYSQL_VERSION=5.5

【问题讨论】:

  • 您使用的是什么墨盒?您是否在您的 Iron.io 工作人员上使用 rhc 端口转发?否则,您的工作人员将如何与数据库通信? db 齿轮的 FQDN 无法在世界范围内访问...
  • 我正在使用 Ruby 2.0 和 MySQL 5.5 墨盒。由于这个错误,我还没有与我的 Iron.io 工作人员建立联系。我读到你必须有一个带有扩展应用程序的付费帐户才能从应用程序外部连接到 MySQL。未缩放的数据库主机是 127.4.68.2(或类似的东西)。我可以使用 rhc port-forward 从我的本地开发环境进行连接。我将发布我的缩放和未缩放应用程序的 MYSQL OpenShift 环境变量列表,以便您查看 DB HOST 和其他值的差异。
  • 恐怕我在上面提供了太多信息:-(。我只是想彻底,但真正的问题是 mysql gem 上的捆绑安装错误(对于缩放的应用程序)只有在RAILS_ENV=development。当RAILS_ENV=production,安装包没有问题。

标签: mysql ruby-on-rails gem bundle openshift


【解决方案1】:

更新:

我重新使用 MySQL 5.1 OpenShift 盒式磁带,错误已解决。

【讨论】:

    猜你喜欢
    • 2020-02-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-21
    相关资源
    最近更新 更多