sinatraをやってみようと思っていろんなサイトを参考に動かそうと思ったらいきなりこれではまった。
require_relative "app" MyApp.run! :host => 'localhost', :port => 9090
こんな感じでやるとエラーが出る。
C:/workspace/ruby/sinatra/config.ru:3:in `block in
': uninitialized constant MyApp (NameError)
from C:/workspace/ruby/sinatra/vendor/bundle/ruby/1.9.1/gems/rack-1.5.2/lib/rack/builder.rb:55:in `instance_eval'
from C:/workspace/ruby/sinatra/vendor/bundle/ruby/1.9.1/gems/rack-1.5.2/lib/rack/builder.rb:55:in `initialize'
from C:/workspace/ruby/sinatra/config.ru:in `new'
from C:/workspace/ruby/sinatra/config.ru:in `'
from C:/workspace/ruby/sinatra/vendor/bundle/ruby/1.9.1/gems/rack-1.5.2/lib/rack/builder.rb:49:in `eval'
from C:/workspace/ruby/sinatra/vendor/bundle/ruby/1.9.1/gems/rack-1.5.2/lib/rack/builder.rb:49:in `new_from_string'
from C:/workspace/ruby/sinatra/vendor/bundle/ruby/1.9.1/gems/rack-1.5.2/lib/rack/builder.rb:40:in `parse_file'
from C:/workspace/ruby/sinatra/vendor/bundle/ruby/1.9.1/gems/rack-1.5.2/lib/rack/server.rb:277:in `build_app_and_options_from_config'
from C:/workspace/ruby/sinatra/vendor/bundle/ruby/1.9.1/gems/rack-1.5.2/lib/rack/server.rb:199:in `app'
from C:/workspace/ruby/sinatra/vendor/bundle/ruby/1.9.1/gems/rack-1.5.2/lib/rack/server.rb:314:in `wrapped_app'
from C:/workspace/ruby/sinatra/vendor/bundle/ruby/1.9.1/gems/rack-1.5.2/lib/rack/server.rb:250:in `start'
from C:/workspace/ruby/sinatra/vendor/bundle/ruby/1.9.1/gems/rack-1.5.2/lib/rack/server.rb:141:in `start'
from C:/workspace/ruby/sinatra/vendor/bundle/ruby/1.9.1/gems/rack-1.5.2/bin/rackup:4:in `'
from C:/workspace/ruby/sinatra/vendor/bundle/ruby/1.9.1/bin/rackup:23:in `load'
from C:/workspace/ruby/sinatra/vendor/bundle/ruby/1.9.1/bin/rackup:23:in `'
とりあえずわけわからないのでぐぐるともう直したとか出てるんだけどまだなるんですが...
Support for require_relative in config.ru by typingArtist · Pull Request #244 · rack/rack · GitHub
require "./app" MyApp.run! :host => 'localhost', :port => 9090
こうやれば動くけどなんかなあと思ってまたぐぐるとここがすごい参考になった。
require_relativeはeval内で必ずLoadErrorになる on Ruby1.9.2 - tagomorisのメモ置き場
Ruby 1.9.2p0 で requireとrequire_relativeについて調べてみた - tagomorisのメモ置き場
同じようにやったら動いた。
app_dir = File.expand_path(File.dirname(__FILE__)) require app_dir + '/app' MyApp.run! :host => 'localhost', :port => 9090
sinatra、Hello world動かすまえにはまるとか難易度高すぎる...