неопределенный метод `run' для main:Object (NoMethodError) Sinatra

require 'sinatra/base'

class Foo < Sinatra::Base
  get('/foo') { 'foo' }
end

class Bar < Sinatra::Base
  get('/bar') { 'bar' }
end

run Rack::Cascade, [Foo, Bar]

Я просто не могу понять, что не так с этим кодом. Когда я запустил: ruby ​​server.rb, он выдает ошибку


person user1136228    schedule 20.03.2012    source источник


Ответы (1)


Прежде всего, последняя строка должна читаться

run Rack::Cascade.new [Foo, Bar]

Но вы можете использовать это только в файле Rackup. Итак, во-вторых, вам нужно создать файл с именем config.ru (файл Rackup) со следующим содержимым:

require './app'
run Rack::Cascade.new [Foo, Bar]

и файл с именем app.rb с вашим фактическим приложением:

require 'sinatra/base'

class Foo < Sinatra::Base
  get('/foo') { 'foo' }
end

class Bar < Sinatra::Base
  get('/bar') { 'bar' }
end

затем вы можете запустить сервер, набрав в командной строке

$ rackup
>> Thin web server (v1.3.1 codename Triple Espresso)
>> Maximum connections set to 1024
>> Listening on 0.0.0.0:9292, CTRL+C to stop

после этого откройте второе окно командной строки и протестируйте свое приложение:

$ curl 0.0.0.0:9292/foo
foo%
$ curl 0.0.0.0:9292/bar
bar%    
person Patrick Oscity    schedule 20.03.2012
comment
Спасибо помогло. Я новичок в Синатре. В примере запускался Rack::Cascade [Foo, Bar], без .new. Возможно, это опечатка или предыдущая версия Sinatra использовала такой синтаксис. - person user1136228; 21.03.2012
comment
Пожалуйста. Когда вы только тестируете, вы также можете написать весь код в config.ru, но я думаю, что это считается плохой практикой. - person Patrick Oscity; 21.03.2012
comment
И является. это хорошая практика, чтобы сделать модульные приложения Sinatra, такие как структура приложения rails с (контроллеры, представления, помощники, lib, общедоступные папки)? - person user1136228; 21.03.2012
comment
Да! На самом деле, Sinatra оставляет за вами выбор, изобретете ли вы полноценное модульное приложение или просто втиснете все в один файл. В этом большое отличие от Rails, который навязывает вам большую часть структуры. - person Patrick Oscity; 21.03.2012