问题描述:

I want to use the new Rails3 feature that allows you to embed a Sinatra app inside rails.

In my routes file, I have:

# app names changed to protect the (not so) innocent

MyApp::Application.routes.draw do

match "/service", :to => MyService

...

end

And in /lib/my_service.rb I have

class MyService < Sinatra::Base

get "/" do

"Hello World"

end

end

When I try to start the Rails server I get Uninitialized constant MyService (NameError), which I suspect means my Sinatra file is in the wrong directory. Where am I supposed to put it?

Full error text:

rails/my_app » rails server

=> Booting WEBrick

=> Rails 3.0.1 application starting in development on http://0.0.0.0:3000

=> Call with -d to detach

=> Ctrl-C to shutdown server

Exiting

/Users/marshallyount/Projects/clients/method/rails/my_app/config/routes.rb:2:in `block in <top (required)>': uninitialized constant MyService (NameError)

from /Users/marshallyount/.rvm/gems/[email protected]_app/gems/actionpack-3.0.1/lib/action_dispatch/routing/route_set.rb:233:in `instance_exec'

from /Users/marshallyount/.rvm/gems/[email protected]_app/gems/actionpack-3.0.1/lib/action_dispatch/routing/route_set.rb:233:in `draw'

from /Users/marshallyount/Projects/clients/method/rails/my_app/config/routes.rb:1:in `<top (required)>'

from /Users/marshallyount/.rvm/gems/[email protected]_app/gems/railties-3.0.1/lib/rails/application.rb:127:in `block in reload_routes!'

from /Users/marshallyount/.rvm/gems/[email protected]_app/gems/railties-3.0.1/lib/rails/application.rb:127:in `each'

from /Users/marshallyount/.rvm/gems/[email protected]_app/gems/railties-3.0.1/lib/rails/application.rb:127:in `reload_routes!'

from /Users/marshallyount/.rvm/gems/[email protected]_app/gems/railties-3.0.1/lib/rails/application.rb:120:in `block in routes_reloader'

from /Users/marshallyount/.rvm/gems/[email protected]_app/gems/activesupport-3.0.1/lib/active_support/file_update_checker.rb:32:in `call'

from /Users/marshallyount/.rvm/gems/[email protected]_app/gems/activesupport-3.0.1/lib/active_support/file_update_checker.rb:32:in `execute_if_updated'

from /Users/marshallyount/.rvm/gems/[email protected]_app/gems/actionpack-3.0.1/lib/action_dispatch/railtie.rb:14:in `block (2 levels) in <class:Railtie>'

from /Users/marshallyount/.rvm/gems/[email protected]_app/gems/activesupport-3.0.1/lib/active_support/callbacks.rb:419:in `_run_prepare_callbacks'

from /Users/marshallyount/.rvm/gems/[email protected]_app/gems/actionpack-3.0.1/lib/action_dispatch/middleware/callbacks.rb:40:in `initialize'

from /Users/marshallyount/.rvm/gems/[email protected]_app/gems/actionpack-3.0.1/lib/action_dispatch/middleware/stack.rb:33:in `new'

from /Users/marshallyount/.rvm/gems/[email protected]_app/gems/actionpack-3.0.1/lib/action_dispatch/middleware/stack.rb:33:in `build'

from /Users/marshallyount/.rvm/gems/[email protected]_app/gems/actionpack-3.0.1/lib/action_dispatch/middleware/stack.rb:79:in `block in build'

from /Users/marshallyount/.rvm/gems/[email protected]_app/gems/actionpack-3.0.1/lib/action_dispatch/middleware/stack.rb:79:in `each'

from /Users/marshallyount/.rvm/gems/[email protected]_app/gems/actionpack-3.0.1/lib/action_dispatch/middleware/stack.rb:79:in `inject'

from /Users/marshallyount/.rvm/gems/[email protected]_app/gems/actionpack-3.0.1/lib/action_dispatch/middleware/stack.rb:79:in `build'

from /Users/marshallyount/.rvm/gems/[email protected]_app/gems/railties-3.0.1/lib/rails/application.rb:162:in `app'

from /Users/marshallyount/.rvm/gems/[email protected]_app/gems/railties-3.0.1/lib/rails/application/finisher.rb:35:in `block in <module:Finisher>'

from /Users/marshallyount/.rvm/gems/[email protected]_app/gems/railties-3.0.1/lib/rails/initializable.rb:25:in `instance_exec'

from /Users/marshallyount/.rvm/gems/[email protected]_app/gems/railties-3.0.1/lib/rails/initializable.rb:25:in `run'

from /Users/marshallyount/.rvm/gems/[email protected]_app/gems/railties-3.0.1/lib/rails/initializable.rb:50:in `block in run_initializers'

from /Users/marshallyount/.rvm/gems/[email protected]_app/gems/railties-3.0.1/lib/rails/initializable.rb:49:in `each'

from /Users/marshallyount/.rvm/gems/[email protected]_app/gems/railties-3.0.1/lib/rails/initializable.rb:49:in `run_initializers'

from /Users/marshallyount/.rvm/gems/[email protected]_app/gems/railties-3.0.1/lib/rails/application.rb:134:in `initialize!'

from /Users/marshallyount/.rvm/gems/[email protected]_app/gems/railties-3.0.1/lib/rails/application.rb:77:in `method_missing'

from /Users/marshallyount/Projects/clients/method/rails/my_app/config/environment.rb:5:in `<top (required)>'

from /Users/marshallyount/Projects/clients/method/rails/my_app/config.ru:3:in `require'

from /Users/marshallyount/Projects/clients/method/rails/my_app/config.ru:3:in `block in <main>'

from /Users/marshallyount/.rvm/gems/[email protected]_app/gems/rack-1.2.1/lib/rack/builder.rb:46:in `instance_eval'

from /Users/marshallyount/.rvm/gems/[email protected]_app/gems/rack-1.2.1/lib/rack/builder.rb:46:in `initialize'

from /Users/marshallyount/Projects/clients/method/rails/my_app/config.ru:1:in `new'

from /Users/marshallyount/Projects/clients/method/rails/my_app/config.ru:1:in `<main>'

from /Users/marshallyount/.rvm/gems/[email protected]_app/gems/rack-1.2.1/lib/rack/builder.rb:35:in `eval'

from /Users/marshallyount/.rvm/gems/[email protected]_app/gems/rack-1.2.1/lib/rack/builder.rb:35:in `parse_file'

from /Users/marshallyount/.rvm/gems/[email protected]_app/gems/rack-1.2.1/lib/rack/server.rb:162:in `app'

from /Users/marshallyount/.rvm/gems/[email protected]_app/gems/rack-1.2.1/lib/rack/server.rb:248:in `wrapped_app'

from /Users/marshallyount/.rvm/gems/[email protected]_app/gems/rack-1.2.1/lib/rack/server.rb:213:in `start'

from /Users/marshallyount/.rvm/gems/[email protected]_app/gems/railties-3.0.1/lib/rails/commands/server.rb:65:in `start'

from /Users/marshallyount/.rvm/gems/[email protected]_app/gems/railties-3.0.1/lib/rails/commands.rb:30:in `block in <top (required)>'

from /Users/marshallyount/.rvm/gems/[email protected]_app/gems/railties-3.0.1/lib/rails/commands.rb:27:in `tap'

from /Users/marshallyount/.rvm/gems/[email protected]_app/gems/railties-3.0.1/lib/rails/commands.rb:27:in `<top (required)>'

from script/rails:6:in `require'

from script/rails:6:in `<main>'

网友答案:

I found a good answer for this question, thanks to this article.

I was missing the all important requires header at the top of my routes file:

require 'my_service.rb'

# app names changed to protect the (not so) innocent
MyApp::Application.routes.draw do
  match "/service", :to => MyService
  ...
end
相关阅读:
Top