我在哪里放置旨在嵌入Rails3应用程序的Sinatra文件?

时间:2010-10-29 17:06:39

标签: ruby-on-rails-3 sinatra

我想使用新的Rails3功能,允许您在rails中嵌入Sinatra应用程序。

在我的路线文件中,我有:

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

在/lib/my_service.rb中我有

class MyService < Sinatra::Base
  get "/" do
    "Hello World"
  end
end

当我尝试启动Rails服务器时,我得到未初始化的常量MyService(NameError),我怀疑这意味着我的Sinatra文件位于错误的目录中。我应该把它放在哪里?

完整错误文字:

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/ruby-1.9.2-p0@my_app/gems/actionpack-3.0.1/lib/action_dispatch/routing/route_set.rb:233:in `instance_exec'
 from /Users/marshallyount/.rvm/gems/ruby-1.9.2-p0@my_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/ruby-1.9.2-p0@my_app/gems/railties-3.0.1/lib/rails/application.rb:127:in `block in reload_routes!'
 from /Users/marshallyount/.rvm/gems/ruby-1.9.2-p0@my_app/gems/railties-3.0.1/lib/rails/application.rb:127:in `each'
 from /Users/marshallyount/.rvm/gems/ruby-1.9.2-p0@my_app/gems/railties-3.0.1/lib/rails/application.rb:127:in `reload_routes!'
 from /Users/marshallyount/.rvm/gems/ruby-1.9.2-p0@my_app/gems/railties-3.0.1/lib/rails/application.rb:120:in `block in routes_reloader'
 from /Users/marshallyount/.rvm/gems/ruby-1.9.2-p0@my_app/gems/activesupport-3.0.1/lib/active_support/file_update_checker.rb:32:in `call'
 from /Users/marshallyount/.rvm/gems/ruby-1.9.2-p0@my_app/gems/activesupport-3.0.1/lib/active_support/file_update_checker.rb:32:in `execute_if_updated'
 from /Users/marshallyount/.rvm/gems/ruby-1.9.2-p0@my_app/gems/actionpack-3.0.1/lib/action_dispatch/railtie.rb:14:in `block (2 levels) in <class:Railtie>'
 from /Users/marshallyount/.rvm/gems/ruby-1.9.2-p0@my_app/gems/activesupport-3.0.1/lib/active_support/callbacks.rb:419:in `_run_prepare_callbacks'
 from /Users/marshallyount/.rvm/gems/ruby-1.9.2-p0@my_app/gems/actionpack-3.0.1/lib/action_dispatch/middleware/callbacks.rb:40:in `initialize'
 from /Users/marshallyount/.rvm/gems/ruby-1.9.2-p0@my_app/gems/actionpack-3.0.1/lib/action_dispatch/middleware/stack.rb:33:in `new'
 from /Users/marshallyount/.rvm/gems/ruby-1.9.2-p0@my_app/gems/actionpack-3.0.1/lib/action_dispatch/middleware/stack.rb:33:in `build'
 from /Users/marshallyount/.rvm/gems/ruby-1.9.2-p0@my_app/gems/actionpack-3.0.1/lib/action_dispatch/middleware/stack.rb:79:in `block in build'
 from /Users/marshallyount/.rvm/gems/ruby-1.9.2-p0@my_app/gems/actionpack-3.0.1/lib/action_dispatch/middleware/stack.rb:79:in `each'
 from /Users/marshallyount/.rvm/gems/ruby-1.9.2-p0@my_app/gems/actionpack-3.0.1/lib/action_dispatch/middleware/stack.rb:79:in `inject'
 from /Users/marshallyount/.rvm/gems/ruby-1.9.2-p0@my_app/gems/actionpack-3.0.1/lib/action_dispatch/middleware/stack.rb:79:in `build'
 from /Users/marshallyount/.rvm/gems/ruby-1.9.2-p0@my_app/gems/railties-3.0.1/lib/rails/application.rb:162:in `app'
 from /Users/marshallyount/.rvm/gems/ruby-1.9.2-p0@my_app/gems/railties-3.0.1/lib/rails/application/finisher.rb:35:in `block in <module:Finisher>'
 from /Users/marshallyount/.rvm/gems/ruby-1.9.2-p0@my_app/gems/railties-3.0.1/lib/rails/initializable.rb:25:in `instance_exec'
 from /Users/marshallyount/.rvm/gems/ruby-1.9.2-p0@my_app/gems/railties-3.0.1/lib/rails/initializable.rb:25:in `run'
 from /Users/marshallyount/.rvm/gems/ruby-1.9.2-p0@my_app/gems/railties-3.0.1/lib/rails/initializable.rb:50:in `block in run_initializers'
 from /Users/marshallyount/.rvm/gems/ruby-1.9.2-p0@my_app/gems/railties-3.0.1/lib/rails/initializable.rb:49:in `each'
 from /Users/marshallyount/.rvm/gems/ruby-1.9.2-p0@my_app/gems/railties-3.0.1/lib/rails/initializable.rb:49:in `run_initializers'
 from /Users/marshallyount/.rvm/gems/ruby-1.9.2-p0@my_app/gems/railties-3.0.1/lib/rails/application.rb:134:in `initialize!'
 from /Users/marshallyount/.rvm/gems/ruby-1.9.2-p0@my_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/ruby-1.9.2-p0@my_app/gems/rack-1.2.1/lib/rack/builder.rb:46:in `instance_eval'
 from /Users/marshallyount/.rvm/gems/ruby-1.9.2-p0@my_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/ruby-1.9.2-p0@my_app/gems/rack-1.2.1/lib/rack/builder.rb:35:in `eval'
 from /Users/marshallyount/.rvm/gems/ruby-1.9.2-p0@my_app/gems/rack-1.2.1/lib/rack/builder.rb:35:in `parse_file'
 from /Users/marshallyount/.rvm/gems/ruby-1.9.2-p0@my_app/gems/rack-1.2.1/lib/rack/server.rb:162:in `app'
 from /Users/marshallyount/.rvm/gems/ruby-1.9.2-p0@my_app/gems/rack-1.2.1/lib/rack/server.rb:248:in `wrapped_app'
 from /Users/marshallyount/.rvm/gems/ruby-1.9.2-p0@my_app/gems/rack-1.2.1/lib/rack/server.rb:213:in `start'
 from /Users/marshallyount/.rvm/gems/ruby-1.9.2-p0@my_app/gems/railties-3.0.1/lib/rails/commands/server.rb:65:in `start'
 from /Users/marshallyount/.rvm/gems/ruby-1.9.2-p0@my_app/gems/railties-3.0.1/lib/rails/commands.rb:30:in `block in <top (required)>'
 from /Users/marshallyount/.rvm/gems/ruby-1.9.2-p0@my_app/gems/railties-3.0.1/lib/rails/commands.rb:27:in `tap'
 from /Users/marshallyount/.rvm/gems/ruby-1.9.2-p0@my_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>'

1 个答案:

答案 0 :(得分:1)

由于this article,我找到了一个很好的答案。

我错过了路线文件顶部的所有重要要求标题:

require 'my_service.rb'

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