gem install
するときのオプション --with-cflags=...
で解決できる.
2024年7月4日木曜日
2017年7月6日木曜日
Mac環境でGit GUI経由でgitkを使ったときに発生するエラー: unknown color name "lime"の解決
SourceTreeの品質がおかしくなって以降、GitのGUIツールの代替えアプリをいくつか試してきた. Github Desktop, SmartGitやGitKrakenなどを使ってみた後, GitKrakenに落ち着いたが, 最近処理が重くなってきたのと, ライセンス関連がうざくなってきたので, 代替えの調査を兼ねて, git (Xcode Command Line Toolsではなく, brewでインストールした方) が標準で用意しているGUIを試してみた.
git guiコマンドでGit Gui.app経由でgitkを起動したとき, Mac OS X El Capitan (10.11.6)環境ではエラーが発生しうまく動かない現象があったが, 解決した. /usr/local/bin/gitkのコードは, いじらなくていい.
(以下の記事は, brewとbrew caskの環境が整っていることを前提としている)
git guiコマンドでGit Gui.app経由でgitkを起動したとき, Mac OS X El Capitan (10.11.6)環境ではエラーが発生しうまく動かない現象があったが, 解決した. /usr/local/bin/gitkのコードは, いじらなくていい.
(以下の記事は, brewとbrew caskの環境が整っていることを前提としている)
2014年5月11日日曜日
Mac の Gimp 2.8.10 でヘルプを使えるようにするには
概要
前回、「Mac OSX 10.9 (Mavericks) で 日本語入力可能な日本語化された Gimp 最新版 (2.8.10) を使うには」 にて、 Mac OS X 10.9.x (Mavericks) にインストールした GIMP 2.8.10 は、エラーによりヘルプドキュメントが見れない状態であることがわかった。そこで本記事では、GIMP の使用している GTK に MimeType の設定を行うことにより、(日本語) ヘルプドキュメントを使用できるようにする。これにより、パッチあてやコンパイルなしに、Mac 用の GIMP 2.8.10 で、以下のようなヘルプメニューを使えるようになる: GIMP のヘルプメニューの ヘルプ (Help)、F1 をおした時の状況適応ヘルプ (Context Help)、今日の技 (Tip of the day)。付録として解析したときのログも掲載した。
この手法は日本語以外の外国語においても有効なはずである。(This solution must be available in any foreign languages other than japanese.)
手法と手順
本記事の手法は、RPM で提供されている GIMP の日本語ヘルプドキュメントを GIMP.app に組み込み、GIMP 内部の GTK の設定に MimeType の追加をすることで、インストール版のヘルプドキュメントを利用可能にするというものです。
以下の手順でおこないます:
- 日本語のローカル版ヘルプドキュメントを GIMP.app に追加する
- GIMP.app のヘルプの設定
- MimeType の設定を GIMP.app が使用している GTK の設定に追加
詳細は、下記のようになります。
1. 日本語のローカル版ヘルプドキュメントを GIMP.app に追加する
前回用意した状態だと、GIMP.app は、一切のヘルプドキュメントを持っていない状態です。なので所定の場所に、ヘルプのデータ (html, 画像) を、ぶち込みます。
GIMP のヘルプドキュメントは別パッケージで提供されていたりします。しかしながら、これをコンパイルするのは結構な手間です。
だから、Linux のディストリビューションで提供されているコンパイル済みパッケージである
RPM
から、中身を吸い出して流用します。この手順は以下のように行います:- RPM Rawhide gimp-help-ja 2.8.1 noarch rpm などを、適当なディレクトリにダウンロードする
rpm2cpio.pl
コマンドをインストールする
ターミナルから、brew install rpm2cpio
(brew の場合) を実行する- RPM をファイルに展開する
ターミナルから、rpm2cpio.pl gimp-help-ja-2.8.1-1.fc21.noarch.rpm | cpio -id
- 展開されたデータの help/ 以下を、GIMP.app にコピーする
前の手順で、カレント・ディレクトリにusr/
以下に展開されたデータができる。この中にあるhelp
ディレクトリを丸ごとコピーする。コピー先は、/Applications/GIMP.app/Contents/Resources/share/gimp/2.0/
で、ここにbrushes
,dynamics
,fonts
, …などとおなじようにhelp
が配置されるようにする。
※ GIMP.app の中身の開き方は、Finder から
/Applications/GIMP.app
を選んで、右クリック > パッケージの内容を表示
です。2. GIMP.app のヘルプの設定
GIMP.app のヘルプ表示の仕方を、ローカルを参照し、また通常の Web ブラウザを使用するように設定します。手順は以下のとおりです:
- メニューのGIMP > 設定 (Preferences)… を選ぶ
- GIMP の設定 ウィンドウが出てくる
- 左ペインのアイコンのリストから、上から 4 番目の ヘルプ を選択
- 右ペインの 全般 にある 使用するユーザーマニュアル から、インストール版 を選択
- 同じく、ヘルプブラウザー の 使用するヘルプブラウザー から、
ウェブブラウザ
を選択 OK
ボタンを押してGIMP の設定
ウィンドウを閉じる- GIMP を終了する
確認方法
GIMP を起動して、メニューから
GIMP
> 設定
> ヘルプ
を見てください。
ここまでの手順がうまくできていれば、「ユーザーマニュアルはインストール済みです。」という表示が出ます (でも、次の手順が済むまではまだ使えません)。
3. Mime タイプの設定を GIMP.app が使用している GTK の設定に追加
上記までの設定で、GIMP はヘルプファイルを認識します。ユーザが、メニューからヘルプを表示しようとすると、GIMP は、
plug-ins/web-browser
でドキュメントを開こうとします。ところが、GIMP が使用している GTK がこれを弾いてしまい、下記のようなエラーとなります:GIMP エラーメッセージ
プロシージャー 'plug-in-web-browser' の呼出し時にエラーが発生しました。
No application is registered as handling this file
Script-Fu から、
(plug-in-web-browser "file://localhost/Applications/GIMP.app/Contents/Resources/share/gimp/2.0/help/ja/index.html")
として同じエラーを再現できることから、URI のスキーム指定 file:
を扱えないことが、原因であることが予想されます。
そこで、GTK がエラーを吐かないように、
mimeinfo.cache
と open.desktop
の 2 つのファイルに MimeType の追加をする修正を行います。これらのファイルたちが格納されている場所は、/Applications/GIMP.app/Contents/Resources/share/applications
です。
まずはターミナルを開いて、カレントディレクトリをこの場所にしてください。
作業の手順は以下のとおりです:
- 元のファイルをバックアップします
cp -p mimeinfo.cache mimeinfo.cache.orig
cp -p open.desktop open.desktop.orig
- mimeinfo.cache の修正
エディタ (vim, emacs, nano など) で、mimeinfo.cache
の最後に一行x-scheme-handler/file=open.desktop;
を追加します - mimeinfo.cache の修正の確認
$ diff mimeinfo.cache.orig mimeinfo.cache 32a33 > x-scheme-handler/file=open.desktop;
- open.desktop の修正
MimeType
の設定に、x-scheme-handler/file;
を追加します - open.desktop の修正の確認
$ diff open.desktop.orig open.desktop 7c7 < MimeType=x-scheme-handler/http;x-scheme-handler/https --- > MimeType=x-scheme-handler/file;x-scheme-handler/http;x-scheme-handler/https
これで、GIMP で日本語のヘルプが使えるようになりました!Yay!
GIMP を起動して、メニューから ヘルプ > ヘルプ などを試してみてください。Web ブラウザが立ち上がって、ヘルプのHTMLファイルが表示されます。
今日の技
で表示されるウィンドウで 詳しくはこちら
を押すと、ブラウザでおなじようにリンクが表示されます。まとめ
- GIMP.app に日本語のヘルプドキュメントを組み込む方法を述べた
- GIMP.app にローカルにインストールしたインストール版ヘルプドキュメントを見るための設定方法を述べた
- GIMP の使用している GTK に MimeType の設定を追加する方法を述べた
以上です。
以降は、トラブルシューティングしたい場合のなんかの参考に。
PS. Mac OS X での GIMP の設定ファイルの場所
システム側
GIMP.app の中の
- Resources/etc
- Resources/share/applications
- Resources/share/gimp/2.0
などなどにある。
ユーザ側
- ~/Library/Application\ Support/GIMP/2.8/
の中に、いろいろな rc ファイルが有る。
- GIMP ヘルプ (User Manual オンライン, 日本語版) http://docs.gimp.org/ja/
- GIMP ドキュメント一覧 http://www.gimp.org/docs/
2010年7月28日水曜日
WinXP環境でGAE/JRuby/Rails/Sinatraにより彼女と自宅でデートする
0. Abstract
熱海はハードル高いので、まずは自宅だよね。ということで、ちょっと以前から:
GoogleAppEngine + JRubyでクリスマスまでに彼女をつくる方法
[Ruby][クラウド] GAE/JRuby/SinatraでHello World
appengine-jrubyで簡単GAE/JRuby開発
JRuby on Rails を GAE/J 上へデプロイ
- 10分ではじめる GAE/JRuby (OAuth + Sinatraのサンプル)
- Impossible to do POSTs with appengine-jruby/RoR: Reflection is not allowed
などを参照して、ローカルPC(XP)でGAEの実験してたわけだが、これまで当方の環境では、ThreadErrorを吐くなど不具合があり、寸分も動作しなかった。
この度、やっと動作を確認できたので、ここに試行錯誤をまとめて示そうと思う。
結論だけ先に挙げますと、gemパッケージ内の主にJRubyに何らかの原因がありいくつか不具合現象が生じていたが、gemの更新により、それらが解消された、というつまらないことなのですが…。
それに加えて、今回ちょっと特殊なのは:
- XPのアカウント名が日本語だったこと
- 動作確認にCygwinも用いたこと
になります。
上記に起因する不具合現象について、相当調査し(ぐぐっ)たが、エラーそのものも含めて、全然情報がなかった。ActiveScriptRubyやCygwinという当方とまっ
たく同じ環境でも、何の問題も無く、みんなすんなり動いてるようでした。
本稿ではまず、1.に実験した環境・構成を示します。次に2.にて、当初存在した
不具合現象を示します。そして、3.に今回成功した修正方法を、4.に修正後の動作結果を示します。最後に、修正方法を5.結論に述べ、今後の課題を6.とします。
またリファレンスと付録を、それぞれ7.、8.とします。
1.動作確認に使用した環境と構成
以下、(1)~(2)に、環境・構成等を示す。
Windows XPは、以下XPと略す。
Cygwin/XPは、XP上にインストールしたCygwinを示す。
ActiveScriptRubyでの実験は、同環境をインストールするとできるruby console
から行った。
Cygwin/XPでの実験は、Cygwinのコンソールから行った。
(1) 実験した環境
実験していたのは、下記のような環境である:
OS Windows XP(winver.exe; Version 5.1 (Build 2600.xpsp_sp3_gdr .100216-1514 :Service Pack 3)), Cygwin/XP(setup.exe version 2.697) Ruby ActiveScriptRuby 1.8.7 (XP; ruby 1.8.7 (2010-01-10 patchlevel 249) [i386-mswin32]), Ruby 1.8.7 (Cygwin/XP; ruby 1.8.7 (2008-08-11 patchlevel 72) [i386-cygwin]) Java java version "1.6.0_20" Java(TM) SE Runtime Environment (build 1.6.0_20-b02) Java HotSpot(TM) Client VM (build 16.3-b01, mixed mode)
AcriveScriptRuby、Cygwin/XP上のruby両者で、動作することを確認できた。
(2)gemの構成
- 構成1(動作しない)
$ gem list *** LOCAL GEMS *** appengine-apis (0.0.16) appengine-rack (0.0.9) appengine-sdk (1.3.4) appengine-tools (0.0.13) bundler08 (0.8.5) google-appengine (0.0.13) jruby-jars (1.4.1) jruby-rack (1.0.1) rack (1.1.0) rubygems-update (1.3.7) rubyzip (0.9.4)
$ gem list *** LOCAL GEMS *** appengine-apis (0.0.18, 0.0.16) appengine-rack (0.0.11, 0.0.9) appengine-sdk (1.3.5, 1.3.4) appengine-tools (0.0.15, 0.0.13) bundler08 (0.8.5) google-appengine (0.0.15, 0.0.13) jruby-jars (1.5.1, 1.4.1) jruby-rack (1.0.1) rack (1.1.0) rubygems-update (1.3.7) rubyzip (0.9.4)
2.不具合現象
不具合現象は、実行時に下記ログに示されるような現象である(一部、当方で入れた
デバッグ用のメッセージも含む)。
◇ログ1(ActiveScriptRuby; No such file or directory (Errno::ENOENT))
D:\Program Files\ruby-1.8\usr\local\sinatra_test>appcfg.rb bundle . D:/Program Files/ruby-1.8/lib/ruby/gems/1.8/gems/appengine-tools-0.0.13/lib/appe ngine-tools/boot.rb:78: warning: `*' interpreted as argument prefix file:/D:/Program Files/ruby-1.8/usr/local/sinatra_test/WEB-INF/lib/jruby-stdlib -1.4.1.jar!/META-INF/jruby.home/lib/ruby/site_ruby/1.8/rubygems.rb:926:in `set_pa ths': No such file or directory - No such file or directory - C:/Documents and S ettings/テ」ツ・セテ」ツ・・(Errno::ENOENT) from file:/D:/Program Files/ruby-1.8/usr/local/sinatra_test/WEB-INF/lib/ jruby-stdlib-1.4.1.jar!/META-INF/jruby.home/lib/ruby/site_ruby/1.8/rubygems.rb from file:/D:/Program Files/ruby-1.8/usr/local/sinatra_test/WEB-INF/lib/ jruby-stdlib-1.4.1.jar!/META-INF/jruby.home/lib/ruby/site_ruby/1.8/rubygems.rb from file:/D:/Program Files/ruby-1.8/usr/local/sinatra_test/WEB-INF/lib/ jruby-stdlib-1.4.1.jar!/META-INF/jruby.home/lib/ruby/site_ruby/1.8/rubygems/defa ults/jruby.rb:17:in `set_paths' from file:/D:/Program Files/ruby-1.8/usr/local/sinatra_test/WEB-INF/lib/ jruby-stdlib-1.4.1.jar!/META-INF/jruby.home/lib/ruby/site_ruby/1.8/rubygems.rb from file:/D:/Program Files/ruby-1.8/usr/local/sinatra_test/WEB-INF/lib/ jruby-stdlib-1.4.1.jar!/META-INF/jruby.home/lib/ruby/site_ruby/1.8/rubygems/defa ults/jruby.rb:60:in `installed_spec_directories' from file:/D:/Program Files/ruby-1.8/usr/local/sinatra_test/WEB-INF/lib/ jruby-stdlib-1.4.1.jar!/META-INF/jruby.home/lib/ruby/site_ruby/1.8/rubygems/sour ce_index.rb:58:in `from_installed_gems' from file:/D:/Program Files/ruby-1.8/usr/local/sinatra_test/WEB-INF/lib/ jruby-stdlib-1.4.1.jar!/META-INF/jruby.home/lib/ruby/site_ruby/1.8/rubygems.rb from file:/D:/Program Files/ruby-1.8/usr/local/sinatra_test/WEB-INF/lib/ jruby-stdlib-1.4.1.jar!/META-INF/jruby.home/lib/ruby/site_ruby/1.8/rubygems/gem_ path_searcher.rb:84:in `init_gemspecs' from file:/D:/Program Files/ruby-1.8/usr/local/sinatra_test/WEB-INF/lib/ jruby-stdlib-1.4.1.jar!/META-INF/jruby.home/lib/ruby/site_ruby/1.8/rubygems/gem_ path_searcher.rb:19:in `initialize' from file:/D:/Program Files/ruby-1.8/usr/local/sinatra_test/WEB-INF/lib/ jruby-stdlib-1.4.1.jar!/META-INF/jruby.home/lib/ruby/site_ruby/1.8/rubygems.rb from file:/D:/Program Files/ruby-1.8/usr/local/sinatra_test/WEB-INF/lib/ jruby-stdlib-1.4.1.jar!/META-INF/jruby.home/lib/ruby/site_ruby/1.8/rubygems.rb from file:/D:/Program Files/ruby-1.8/usr/local/sinatra_test/WEB-INF/lib/ jruby-stdlib-1.4.1.jar!/META-INF/jruby.home/lib/ruby/site_ruby/1.8/rubygems.rb from file:/D:/Program Files/ruby-1.8/usr/local/sinatra_test/WEB-INF/lib/ jruby-stdlib-1.4.1.jar!/META-INF/jruby.home/lib/ruby/site_ruby/1.8/rubygems.rb from file:/D:/Program Files/ruby-1.8/usr/local/sinatra_test/WEB-INF/lib/ jruby-stdlib-1.4.1.jar!/META-INF/jruby.home/lib/ruby/site_ruby/1.8/rubygems.rb from file:/D:/Program Files/ruby-1.8/usr/local/sinatra_test/WEB-INF/lib/ jruby-stdlib-1.4.1.jar!/META-INF/jruby.home/lib/ruby/site_ruby/1.8/rubygems.rb from D:/PROGRA~1/ruby-1.8/bin/appcfg.rb:9 Error executing jruby
◇エラーログ2 (Cygwin/XP, dev_appserver.rb; Error opening zip file or JAR manifest missing)
$dev_appserver.rb . /usr/lib/ruby/gems/1.8/gems/appengine-tools-0.0.15/lib/appengine-tools/boot.rb => Booting DevAppServer => Press Ctrl-C to shutdown server exec "java" "-classpath" "/usr/lib/ruby/gems/1.8/gems/appengine-sdk-1.3.5/appeng ine-java-sdk-1.3.5/lib/appengine-tools-api.jar" "-Djava.util.logging.config.file =/usr/lib/ruby/gems/1.8/gems/appengine-sdk-1.3.5/appengine-java-sdk-1.3.5/config /sdk/logging.properties" "-Dcom.google.appengine.plugin.path=/usr/lib/ruby/gems/1 .8/gems/appengine-tools-0.0.15/lib/appengine-tools/app_yaml.jar" "-javaagent:/u sr/lib/ruby/gems/1.8/gems/appengine-sdk-1.3.5/appengine-java-sdk-1.3.5/lib/agent /appengine-agent.jar" "com.google.appengine.tools.development.DevAppServerMain" "--disable_update_check" "/home/masa/local/sinatra_test" Error opening zip file or JAR manifest missing : /usr/lib/ruby/gems/1.8/gems/app engine-sdk-1.3.5/appengine-java-sdk-1.3.5/lib/agent/appengine-agent.jar Error occurred during initialization of VM agent library failed to init: instrument
◇エラーログ3(ActiveScriptRuby; Mutex relocking by same thread (ThreadError))
D:\Program Files\ruby-1.8\usr\local\sinatra_test>appcfg.rb generate_app . D:/Program Files/ruby-1.8/lib/ruby/gems/1.8/gems/appengine-tools-0.0.13/lib/appe ngine-tools/boot.rb:78: warning: `*' interpreted as argument prefix => Generating gemfile => Bundling gems D:/Program Files/ruby-1.8/lib/ruby/1.8/pathname.rb:263: warning: `*' interpreted as argument prefix D:/Program Files/ruby-1.8/lib/ruby/gems/1.8/gems/bundler08-0.8.5/lib/bundler08/d ependency.rb:59: warning: discarding old version Calculating dependencies... Updating source: http://gems.rubyforge.org D:/Program Files/ruby-1.8/lib/ruby/gems/1.8/gems/bundler08-0.8.5/lib/bundler08/r esolver.rb:115:Warning: Gem::Dependency#version_requirements is deprecated and w ill be removed on or after August 2010. Use #requirement Caching: appengine-rack-0.0.9.gem Caching: jruby-jars-1.4.1.gem Caching: jruby-rack-1.0.1.gem Caching: rack-1.1.0.gem Installing jruby-jars (1.4.1) Installing rack (1.1.0) Installing jruby-rack (1.0.1) Installing appengine-rack (0.0.9) Done. => Packaging gems => Installing appengine-rack.jar => Installing jruby-core-1.4.1.jar => Installing jruby-stdlib-1.4.1.jar => Installing jruby-rack-1.0.1.jar => Installing appengine-sdk => Generating rackup file:/D:/Program Files/ruby-1.8/usr/local/sinatra_test/WEB-INF/lib/jruby-stdlib -1.4.1.jar!/META-INF/jruby.home/lib/ruby/site_ruby/1.8/rubygems.rb:888:in `search er': Mutex relocking by same thread (ThreadError) from file:/D:/Program Files/ruby-1.8/usr/local/sinatra_test/WEB-INF/lib/ jruby-stdlib-1.4.1.jar!/META-INF/jruby.home/lib/ruby/site_ruby/1.8/rubygems/cust om_require.rb:33:in `require' from file:/D:/Program Files/ruby-1.8/usr/local/sinatra_test/WEB-INF/lib/ jruby-stdlib-1.4.1.jar!/META-INF/jruby.home/lib/ruby/site_ruby/shared/builtin/ja vasupport.rb:37 from file:/D:/Program Files/ruby-1.8/usr/local/sinatra_test/WEB-INF/lib/ jruby-stdlib-1.4.1.jar!/META-INF/jruby.home/lib/ruby/site_ruby/shared/builtin/ja vasupport.rb:31:in `require' from file:/D:/Program Files/ruby-1.8/usr/local/sinatra_test/WEB-INF/lib/ jruby-stdlib-1.4.1.jar!/META-INF/jruby.home/lib/ruby/site_ruby/1.8/rubygems/cust om_require.rb:31:in `require' from file:/D:/Program Files/ruby-1.8/usr/local/sinatra_test/WEB-INF/lib/ jruby-stdlib-1.4.1.jar!/META-INF/jruby.home/lib/ruby/site_ruby/1.8/rubygems/defa ults/jruby.rb:70:in `spec_directories_from_classpath' from file:/D:/Program Files/ruby-1.8/usr/local/sinatra_test/WEB-INF/lib/ jruby-stdlib-1.4.1.jar!/META-INF/jruby.home/lib/ruby/site_ruby/1.8/rubygems/defa ults/jruby.rb:60:in `installed_spec_directories' from file:/D:/Program Files/ruby-1.8/usr/local/sinatra_test/WEB-INF/lib/ jruby-stdlib-1.4.1.jar!/META-INF/jruby.home/lib/ruby/site_ruby/1.8/rubygems/sour ce_index.rb:58:in `from_installed_gems' from file:/D:/Program Files/ruby-1.8/usr/local/sinatra_test/WEB-INF/lib/ jruby-stdlib-1.4.1.jar!/META-INF/jruby.home/lib/ruby/site_ruby/1.8/rubygems.rb from file:/D:/Program Files/ruby-1.8/usr/local/sinatra_test/WEB-INF/lib/ jruby-stdlib-1.4.1.jar!/META-INF/jruby.home/lib/ruby/site_ruby/1.8/rubygems/gem_ path_searcher.rb:84:in `init_gemspecs' from file:/D:/Program Files/ruby-1.8/usr/local/sinatra_test/WEB-INF/lib/ jruby-stdlib-1.4.1.jar!/META-INF/jruby.home/lib/ruby/site_ruby/1.8/rubygems/gem_ path_searcher.rb:19:in `initialize' from file:/D:/Program Files/ruby-1.8/usr/local/sinatra_test/WEB-INF/lib/ jruby-stdlib-1.4.1.jar!/META-INF/jruby.home/lib/ruby/site_ruby/1.8/rubygems.rb from file:/D:/Program Files/ruby-1.8/usr/local/sinatra_test/WEB-INF/lib/ jruby-stdlib-1.4.1.jar!/META-INF/jruby.home/lib/ruby/site_ruby/1.8/rubygems.rb from file:/D:/Program Files/ruby-1.8/usr/local/sinatra_test/WEB-INF/lib/ jruby-stdlib-1.4.1.jar!/META-INF/jruby.home/lib/ruby/site_ruby/1.8/rubygems.rb from file:/D:/Program Files/ruby-1.8/usr/local/sinatra_test/WEB-INF/lib/ jruby-stdlib-1.4.1.jar!/META-INF/jruby.home/lib/ruby/site_ruby/1.8/rubygems.rb from file:/D:/Program Files/ruby-1.8/usr/local/sinatra_test/WEB-INF/lib/ jruby-stdlib-1.4.1.jar!/META-INF/jruby.home/lib/ruby/site_ruby/1.8/rubygems.rb from file:/D:/Program Files/ruby-1.8/usr/local/sinatra_test/WEB-INF/lib/ jruby-stdlib-1.4.1.jar!/META-INF/jruby.home/lib/ruby/site_ruby/1.8/rubygems.rb:9 from D:/PROGRA~1/ruby-1.8/bin/appcfg.rb:9 Error executing jruby
3.回避・修正方法
不具合現象の(1)、(3)に関しては、google-appengineパッケージの更新(下記(1))で、修正されることがわかった。不具合現象(2)については、パッケージ内のスクリプトの一部のパスの指定方法に、問題があることがわかった(下記(2))。
下記(1)、(2)に回避・修正方法を示す。
(1) GAE gemファイルの更新
エラーログから、jruby-jar等に問題があることが推測された。
google-appengineのgemを最新のものに更新することで、当該現象は発生が抑えられた。
gem update google-appengine
(2) GAE/JRubyのスクリプトdev_appserver.rbの修正(Cygwinの場合)
パスの指定部分を、全てcygpathでラッピングする[1]。
/lib/ruby/gems/1.8/gems/appengine-tools-0.0.15/lib/appengine-tools/ appserver.rb < server_args[-1] = File.expand_path(path) --- > tmp_expath = File.expand_path(path) > server_args[-1] = `cygpath -wp #{tmp_expath}`.chomp < java_args << AppEngine::SDK::TOOLS_JAR --- > java_args << `cygpath -wp #{AppEngine::SDK::TOOLS_JAR}`.chomp < AppEngine::SDK::SDK_ROOT + '/config/sdk/logging.properties' < java_args << "-Dcom.google.appengine.plugin.path=#{plugin_jar}" --- > `cygpath -wp #{AppEngine::SDK::SDK_ROOT}/config/sdk/logging.prop erties`.chomp > java_args << "-Dcom.google.appengine.plugin.path="+`cygpath -wp #{pl ugin_jar}`.chomp > < java_args << '-javaagent:' + AppEngine::SDK::AGENT_JAR --- > java_args << '-javaagent:' + `cygpath -wp #{AppEngine::SDK::AGENT_ JAR}`.chomp
これもっと綺麗な方法ないかな、とも思いますが・・・。
4.動作結果
ブラウザからhttp://localhost:8080/にアクセスすれば、所望の結果が得られる。
D:\Program Files\ruby-1.8\usr\local\sinatra_test>dev_appserver.rb.bat . D:/PROGRA~1/ruby-1.8/lib/ruby/gems/1.8/gems/appengine-tools-0.0.15/lib/appengine -tools/boot.rb:50: warning: `*' interpreted as argument prefix => Booting DevAppServer => Press Ctrl-C to shutdown server 2010/07/26 1:23:22 com.google.apphosting.utils.jetty.JettyLogger info 情報: Logging to JettyLogger(null) via com.google.apphosting.utils.jetty.JettyLo gger 2010/07/26 1:23:22 com.google.apphosting.utils.config.AppEngineWebXmlReader read AppEngineWebXml 情報: Successfully processed D:\Program Files\ruby-1.8\usr\local\sinatra_test\WE B-INF/appengine-web.xml 2010/07/26 1:23:22 com.google.apphosting.utils.config.AbstractConfigXmlReader re adConfigXml 情報: Successfully processed D:\Program Files\ruby-1.8\usr\local\sinatra_test\WE B-INF/web.xml 2010/07/26 1:23:22 com.google.apphosting.utils.jetty.JettyLogger info 情報: jetty-6.1.x 2010/07/26 1:23:25 com.google.apphosting.utils.jetty.JettyLogger info 情報: Started SelectChannelConnector@127.0.0.1:8080 2010/07/26 1:23:25 com.google.appengine.tools.development.DevAppServerImpl start 情報: The server is running at http://localhost:8080/
5.結論
JRuby(jruby-jars)は、バージョンによってはActiveScriptRuby、もしくはCygwin/XPにおいて、ThreadErrorにより動作しない
Cygwinでは、一部のスクリプトのjavaコマンド発行時のパス名が問題となる
上記により、ActiveScriptRuby, Cygwin/XP両者の環境で、ローカルPC上で、GAE/JRubyの動作を確認できた。
gemパッケージ:google-appengineを、最新のバージョンに更新する。
Cygwinのコマンド:cygpath -wp で、ラッピングしてjavaコマンドに渡されるように、dev_appserver.rbを修正する。
6. Future Works
- gem, appcfg.rb, dev_appserver.rb の使い方詳細の調査
- リモート・サーバ上での動作
- 彼女を作る
- 不具合現象の原因となるgemパッケージの依存関係、ThreadErrorの生じる箇所
については、今回あきらめた。JRubyの内部動作に強い興味を持つ向きは、探ってみてもよいかもしれない。
7.補論
- Gemリポジトリ格納場所の再設定
不具合現象(1)の発生は、3.回避・修正方法の(1)により、抑えられる。しかし、類似の現象を未然に防止するため、Gemリポジトリの設定をしておいたほうがよいかもしれない。
本稿の場合、3.appcfg.rbから実行されるgemにおいて、リポジトリ処理に日本語パス名起因である不具合現象(1)が、当初存在していた。
gemは、動作時にリポジトリ・ファイルを作成する[2]。
AcitiveScriptRubyの場合、特に指定がなければ、リポジトリはディレクトリ:%HOME%となる。このパス名に、日本語が含まれている場合、google-appengineのバージョンによっては、不具合現象(1) の原因になる。
これを防ぐには、google-appengineパッケージの更新、もしくは環境変数GEM_HOMEを、適切に設定する。
設定方法は、
コンパネ>システム>詳細設定、またはコマンド・プロンプト で、環境変数:GEM_HOMEを、日本語を含まないパスに設定する
である。
Cygwinに関しては、ホーム・ディレクトリを、日本語パス名を含まないものに変更している。
8.References
[1] Toru Takahashi; "CygwinでJavaを快適に使う";http://www.02.246.ne.jp/~torutk/javaoncygwin/javaoncygwin.html
[2] docs.rubygems.org; "RubyGems User Guide | RubyGems Manuals";
3.2 Installing RubyGems in a User Directory,
http://docs.rubygems.org/read/chapter/3#page83
ラベル:
CT-技術,
ENOENT,
GAE,
JRuby,
Mutex relocking,
ruby,
RubyOnRails,
sinatra,
ThreadError,
エラー
登録:
投稿 (Atom)