LoadErrorに心が折れそうなときに試したい2つのこと
[gae/jruby] GAE/J+JRuby環境のno such file to loadに心が折れそうなときに試したい2つのこと
今日の課題
このエラーに対処します。
$ $ dev_appserver.rb . => Booting DevAppServer => Press Ctrl-C to shutdown server 中略 org.jruby.rack.RackInitializationException: no such file to load -- appengine-apis/users from ./app.rb:2 from ./app.rb:19:in `require' from config.ru:19 at org.jruby.rack.DefaultRackApplicationFactory$4.init(DefaultRackApplicationFactory.java:172) at org.jruby.rack.DefaultRackApplicationFactory.getApplication(DefaultRackApplicationFactory.java:51) at org.jruby.rack.SharedRackApplicationFactory.init(SharedRackApplicationFactory.java:27) 中略 $ $
このエラーにも対処します。
$ jruby -S spec spec/なんとかかんとか_spec.rb #<LoadError: no such file to load -- appengine-apis> 中略 /opt/local/share/java/jruby/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `require': no such file to load -- appengine-apis (LoadError) from /opt/local/share/java/jruby/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `require' 中略
誰が使うの?
- 正しいかどうかはさておき、とにかくコンパイルを通したい人
- require 'appengine-apis/logger'とかrequire 'appengine-apis/users'が通らなくてイライラしている人
どのように機能するの?
- appengine-apisへのパスをとにかく通します。
どこで確認したの?
$ uname -v Darwin Kernel Version 10.3.0: Fri Feb 26 11:58:09 PST 2010; root:xnu-1504.3.12~1/RELEASE_I386 $ $ ruby -v ruby 1.8.7 (2010-01-10 patchlevel 249) [i686-darwin10] $ $ jruby -v jruby 1.4.0 (ruby 1.8.7 patchlevel 174) (2010-04-22 6586) (Java HotSpot(TM) 64-Bit Server VM 1.6.0_17) [x86_64-java] $ $ java -version java version "1.6.0_17" Java(TM) SE Runtime Environment (build 1.6.0_17-b04-248-10M3025) Java HotSpot(TM) 64-Bit Server VM (build 14.3-b01-101, mixed mode) $
いつ確認したの?
- 2010年5月4日
何が参考になるの?
- 特にありません。
何か注意点はあるの?
- このやり方が正しいかよくわかりません。正しくなくてもとにかく動かしたい人向け。
試したいこと。その1
こういうコードで..
$ $ cat app.rb require 'sinatra' require 'appengine-apis/users' get '/' do puts "aa" end $ $ $ cat Gemfile # Critical default settings: disable_system_gems disable_rubygems bundle_path ".gems/bundler_gems" # List gems to bundle here: gem "appengine-rack" gem 'sinatra' $ $
開発サーバを起動時に no such file to load エラーがでるとき。
$ $ dev_appserver.rb . => Booting DevAppServer => Press Ctrl-C to shutdown server 中略 org.jruby.rack.RackInitializationException: no such file to load -- appengine-apis/users from ./app.rb:2 from ./app.rb:19:in `require' from config.ru:19 at org.jruby.rack.DefaultRackApplicationFactory$4.init(DefaultRackApplicationFactory.java:172) at org.jruby.rack.DefaultRackApplicationFactory.getApplication(DefaultRackApplicationFactory.java:51) at org.jruby.rack.SharedRackApplicationFactory.init(SharedRackApplicationFactory.java:27) 中略 $ $
コード内にrequire 'appengine-apis' を追記して....
Gemfileにgem 'appengine-apis' を追記して....
$ $ $ cat app.rb require 'sinatra' require 'appengine-apis' require 'appengine-apis/users' get '/' do puts "aa" end $ $ $ cat Gemfile # Critical default settings: disable_system_gems disable_rubygems bundle_path ".gems/bundler_gems" # List gems to bundle here: gem "appengine-rack" gem 'appengine-apis' gem 'sinatra' $ $
実行するとロードエラーが消えた!!
パスに解決にgem 'appengine-apis'が必要だったようです。
$ $ $ dev_appserver.rb . => Booting DevAppServer => Press Ctrl-C to shutdown server => Bundling gems Calculating dependencies... Updating source: http://gems.rubyforge.org Downloading appengine-apis-0.0.14.gem Installing appengine-apis (0.0.14) Done. => Packaging gems 中略 2010/05/04 4:40:47 com.google.apphosting.utils.jetty.JettyLogger info ???: Started SelectChannelConnector@127.0.0.1:8080 The server is running at http://localhost:8080/
試したいこと。その2
jrubyから単体テストを実行するようなケースでappengine-apisにno such file to loadエラーがでるとき。
$ jruby -S spec spec/なんとかかんとか_spec.rb #<LoadError: no such file to load -- appengine-apis> 中略 /opt/local/share/java/jruby/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `require': no such file to load -- appengine-apis (LoadError) from /opt/local/share/java/jruby/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `require' 中略
コード内に「試したいこと。その1」のようにrequire 'appengine-apis' を追記してもエラーは解消しませんでした。
その時のgemの状態です。いずれもgem install google-appengineではインストールしたものです。
$ $ jgem list | grep -E '(appengine|bundler)' appengine-jruby-jars (0.0.7.pre) appengine-rack (0.0.7) appengine-sdk (1.3.2) appengine-tools (0.0.11) bundler08 (0.8.5) google-appengine (0.0.11) $ $
appengine-apisは含まれていない。これが必要なのかな?
後先考えずにインストール!!
$ sudo jgem install appengine-apis
再実行するとエラーメッセージが変わった!!
SyntaxErrorです。バグでしょうか?
syntax error in testing.rb ...
$ $ jruby -S spec spec/なんとかかんとか_spec.rb #<SyntaxError: /opt/local/share/java/jruby/lib/ruby/gems/1.8/gems/appengine-apis-0.0.14/lib/appengine-apis/testing.rb:59: , unexpected tRPAREN configs = nil if ENV['SKIP_LOCAL_SERVICE_APIS') ^ 中略
確かにカッコの対応がおかしいのようです。
後先考えずに、gemのコードを直に修正します。(自己責任でどうぞ)
before
configs = nil if ENV['SKIP_LOCAL_SERVICE_APIS')
after
configs = nil if ENV['SKIP_LOCAL_SERVICE_APIS']
通った!!