みんなのちからになりたい

コピペでブログラムつくっていきたい

config.ruの中でrequire_relativeするとエラーになる

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

sinatraHello world動かすまえにはまるとか難易度高すぎる...