Была похожая проблема с sinatra 1.0 на ruby 1.9.2. Ответ должен был добавить enable :run
к вашему коду.
Посмотрите документы для :run
конфигурации - если вы собираетесь развертывать на сервере, вам нужно сделать что-то вроде enable :run if __FILE__ == $0
, чтобы вы только запускали встроенный сервер во время разработки, когда вам это нужно.
Строго говоря, ваш код верен и должен нормально работать, и фактически он работает с ruby 1.8.7 и 1.9.2. Кажется, проблема в том, что он работает с ruby 1.9.1. В целом, версия 1.9.1 выглядит довольно устаревшей, и вам, возможно, стоит попробовать обновить ее до 1.9.2. Если в Ubuntu нет пакетов для 1.9.2, взгляните на rvm . (На самом деле, если вы собираетесь заниматься разработкой ruby, то в любом случае стоит взглянуть на rvm).
Обновление:
Мне удалось скомпилировать ruby 1.9.1, чтобы проверить это, и ваш код работал нормально. Также немного погуглил, что пакет Ubuntu ruby1.9.1 все равно предоставляет ruby 1.9.2 . Так что, похоже, что-то еще происходит, что не позволяет установить :run
при непосредственном запуске файла, хотя я не знаю, что это может быть.
Еще одно обновление:
Глядя на пакет Ubuntu Sinatra , похоже, что он версии 1.0. Возможно, ваша установка использует Ubuntu
упаковать и игнорировать более свежую версию, установленную через rubygems. Это может объяснить, что происходит. Если это так, то это не «похожая проблема» для ruby 1.9 и sinatra 1.0, как я предлагал выше, это та же проблема!
Еще одно обновление:
Пара вещей произошла со мной. Вы можете проверить, какую версию Sinatra вы используете на самом деле, например, puts Sinatra::VERSION
после require 'sinatra'
. Кроме того, похоже, что есть команда gem1.9.1
, соответствующая ruby1.9.1
. Похоже, когда вы установили sinatra с sudo gem install sinatra
, последняя версия была установлена в установку ruby 1.8, и вышла ruby 1.9 с Ubuntu Sinatra 1.0. Если вы еще не переключились на rvm, попробуйте sudo gem1.9.1 install sinatra
.