Browse Tag: gem

GitHub 上などにある Gem をインストールする方法

GitHub 上にあるとあるフォークした Gem(Rubygems にはリリースされていない)をインストールすることになりました。

普通なら、Gemfile を書いて bundle 経由でインストールするのが一般的だと思いますが、1つの Gem だったので、何か他の方法がないかなと調査したところ、specific_install というコマンドを使うとできました!

使い方は、とても簡単です。

$ sudo gem install --no-document specific_install
$ sudo specific_install -l https://github.com/<リポジトリ>.git -b <ブランチ名>

という感じでインストールすることができます!
今回、td-agent の flunetd plugin で特別に1つカスタマイズされたものがあって、無事 GitHub 上にあるとあるフォークした fluentd plugin をインストールすることができました。
td-agent の場合は、gem コマンドの代わりに td-agent-gem を使えば良いので、とても便利でした。

OSX で mysql5.6 環境下で mysql/mysql2 gem のインストールエラーがでた

OSX で mysql5.6 環境下で mysql/mysql2 gem のインストールエラーがでた。


Gem::Installer::ExtensionBuildError: ERROR: Failed to build gem native extension.

/Users/.../bin/ruby extconf.rb --with-mysql-config=/usr/lo
cal/mysql/bin/mysql_config
checking for mysql_ssl_set()... no
checking for rb_str_set_len()... no
checking for rb_thread_start_timer()... no
checking for mysql.h... no
checking for mysql/mysql.h... no
*** 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
--without-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=/Users/.../bin/ruby
--with-mysql-config

Gem files will remain installed in /Users/.../gems/mysql-2.9.1 for i
nspection.
Results logged to /Users/.../gems/mysql-2.9.1/ext/mysql_api/gem_make
.out

もちろん、事前に mysql_config はちゃんと設定している。

$ bundle config build.mysql --with-mysql-config=/usr/local/mysql/bin/mysql_config
$ bundle config build.mysql2 --with-mysql-config=/usr/local/mysql/bin/mysql_config

結論とすると、/usr/local/mysql/bin/mysql_config を次のように直せば良い。

--- /usr/local/mysql/bin/mysql_config-org 2013-08-13 11:52:25.000000000 +0900
+++ /usr/local/mysql/bin/mysql_config 2013-08-13 11:52:57.000000000 +0900
@@ -116,8 +116,8 @@
embedded_libs=" $ldflags -L$pkglibdir -lmysqld "
embedded_libs="$embedded_libs "

-cflags="-I$pkgincludedir -Wall -Wno-null-conversion -Wno-unused-private-field -Os -g -fno-strict-aliasing -DDBUG_OFF -arch x86_64 " #note: end space!
-cxxflags="-I$pkgincludedir -Wall -Wno-null-conversion -Wno-unused-private-field -Os -g -fno-strict-aliasing -DDBUG_OFF -arch x86_64 " #note: end space!
+cflags="-I$pkgincludedir -Wall -Os -g -fno-strict-aliasing -DDBUG_OFF -arch x86_64 " #note: end space!
+cxxflags="-I$pkgincludedir -Wall -Os -g -fno-strict-aliasing -DDBUG_OFF -arch x86_64 " #note: end space!
include="-I$pkgincludedir"

-Wno-null-conversion -Wno-unused-private-field というフラグを削除する必要があるみたい。

これは、mysql をアップデートしたときには、しばらく忘れずにやらにといけない。

これで mysql/mysql2 gem は無事インストールすることができるが、実際にアプリを実行してみると次のようエラーが出る。。。

dlopen(/Users/.../gems/mysql2-0.3.11/lib/mysql2/mysql2.bundle, 9): Library not loaded: /usr/local/mysql-5.5.28-osx10.6-x86_64/lib/libmysqlclient.18.dylib Referenced from: /Users/.../gems/mysql2-0.3.11/lib/mysql2/mysql2.bundle Reason: image not found - /Users/.../gems/mysql2-0.3.11/lib/mysql2/mysql2.bundle

備忘録としてのメモ。

libmysqlclient.18.dylib が見つからないらしい。

解決方法は、環境変数 DYLD_LIBRARY_PATH を定義するといいみたいだが、定義すると次のようなの警告が表示されてしまった。

dyld: DYLD_ environment variables being ignored because main executable (/usr/bin/sudo) is setuid or setgid

ということで、次を実行して、アプリケーションサーバを再起動したら無事解決した。

$ sudo ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylib

rubygems のミラーサイトを作る方法

ふと、rubygems のミラーサイトを作る方法を調べてみた。rubygems のミラーサイトサイトを作るには、gem mirror というコマンドを使う。

gem mirror コマンドの使い方は、gem help mirror とすると、すぐに分かる。

まず、$HOME/.gemmirrorrc ファイルを作成して、次のように記述する。


---
- from: http://gems.rubyforge.org
to: /gemを保存するパス

.gemmirrorrc の最初は、ハイフン三つです。半角でないと、エラーが出るので注意。

あとは、gem mirror を実行するだけで、.gemmirrorrc で設定した場所に gem ファイルをダウンロードしてくれる。

今日現在、15,030 個の gem があるので、現在 fetching 中…。

次は、gem でミラーサイトを設定する方法を紹介する。

どうして、http://www.rubygems.org/read/chapter/10に説明がないのだろうか。と思ったら rubygems 0.8 系のドキュメントらしい。更新してほしい!