Почему Синатра не работает правильно? - PullRequest
2 голосов
/ 30 апреля 2011

Недавно я пытался настроить экземпляр Amazon EC2 для запуска приложений Rails и Sinatra. Проблема - Синатра не запустится. Когда я пытаюсь запустить файл .rb, он выдает что-то вроде этого:

$ ruby hello.rb 
/usr/local/rvm/gems/ruby-1.8.7-p334/gems/sinatra-1.2.5/lib/sinatra/base.rb:1144:in `define_method': tried to create Proc object without a block (ArgumentError)
        from /usr/local/rvm/gems/ruby-1.8.7-p334/gems/sinatra-1.2.5/lib/sinatra/base.rb:1144:in `compile!'
        from /usr/local/rvm/gems/ruby-1.8.7-p334/gems/sinatra-1.2.5/lib/sinatra/base.rb:1129:in `route'
        from /usr/local/rvm/gems/ruby-1.8.7-p334/gems/sinatra-1.2.5/lib/sinatra/base.rb:1111:in `get'
        from /usr/local/rvm/gems/ruby-1.8.7-p334/gems/sinatra-1.2.5/lib/sinatra/base.rb:1474:in `send'
        from /usr/local/rvm/gems/ruby-1.8.7-p334/gems/sinatra-1.2.5/lib/sinatra/base.rb:1474:in `get'
        from hello.rb:4

Теперь я сначала подумал, что это что-то особенное для EC2. Поэтому я настроил RVM на своем Mac и попробовал то же самое - тот же результат. Тогда я подумал, что это может быть конкретная версия Ruby (1.9.2). Это не так - проблема сохраняется даже с 1.8.7. Теперь я полностью потерян. Вот список драгоценных камней, установленных на моем экземпляре EC2:

$ gem list

*** LOCAL GEMS ***

abstract (1.0.0)
actionmailer (3.0.7)
actionpack (3.0.7)
activemodel (3.0.7)
activerecord (3.0.7)
activeresource (3.0.7)
activesupport (3.0.7)
arel (2.0.9)
builder (2.1.2)
bundler (1.0.12)
coderay (0.9.7)
erubis (2.6.6)
i18n (0.5.0)
mail (2.2.19)
method_source (0.4.1)
mime-types (1.16)
polyglot (0.3.1)
pry (0.8.3)
rack (1.2.2)
rack-mount (0.6.14)
rack-test (0.5.7)
rails (3.0.7)
railties (3.0.7)
rainbow (1.1.1)
rake (0.8.7)
ruby_parser (2.0.6)
sexp_processor (3.0.5)
sinatra (1.2.5)
slop (1.5.3)
thor (0.14.6)
tilt (1.3)
treetop (1.4.9)
tzinfo (0.3.27)

Пожалуйста, дайте мне знать, что вы об этом думаете - любая помощь приветствуется.

Ответы [ 2 ]

1 голос
/ 01 мая 2011

Похоже, это ошибка в Синатре: https://github.com/sinatra/sinatra/issues/258.

В качестве обходного пути попробуйте предыдущую версию sinatra: gem install sinatra -v 1.2.3, либо в новом наборе гемов rvm, либо укажите нужную версию в вашем файле с gem 'sinatra' '=1.2.3' перед строкой require sinatra.

Обновление:

Sinatra 1.2.5 (ошибочная версия) был вырван и выпущена новая версия . Любой, кто получил эту ошибку, теперь может просто сделать gem update sinatra и использовать обновленный гем.

0 голосов
/ 01 мая 2011

Это не проблема RVM, так как я использую его с Sinatra.

Вот некоторый тестовый код:

#!/usr/bin/env ruby

require 'sinatra'

get '/hi' do
  "Hello World! #{ `rvm -v` }"
end

Сохраните это как что-то вроде test.rb и выполните chmod +x test.rbсделать его исполняемым.Подтвердите, что вы запускаете Ruby под управлением RVM, используя which ruby, который должен возвращать путь в вашем пути ~/.rvm.Запустите код, используя ./test.rb, и ваш Ruby, управляемый RVM, запустит его.

Консоль вышла:

>> == Sinatra/1.2.3 has taken the stage on 4567 for development with backup from WEBrick
>> [2011-04-30 14:49:56] INFO  WEBrick 1.3.1
>> [2011-04-30 14:49:56] INFO  ruby 1.9.2 (2011-02-18) [x86_64-darwin10.6.0]
>> [2011-04-30 14:49:56] INFO  WEBrick::HTTPServer#start: pid=3387 port=4567
>> 127.0.0.1 - - [30/Apr/2011 14:50:02] "GET /hi HTTP/1.1" 200 103 0.2499
>> localhost - - [30/Apr/2011:14:50:01 MST] "GET /hi HTTP/1.1" 200 103
>> - -> /hi
>> 127.0.0.1 - - [30/Apr/2011 14:50:02] "GET /favicon.ico HTTP/1.1" 404 441 0.0008
>> localhost - - [30/Apr/2011:14:50:02 MST] "GET /favicon.ico HTTP/1.1" 404 441
>> http://localhost:4567/hi -> /favicon.ico
>> 
>> == Sinatra has ended his set (crowd applauds)
>> [2011-04-30 14:50:11] INFO  going to shutdown ...
>> [2011-04-30 14:50:11] INFO  WEBrick::HTTPServer#start done.

И то, что я увидел в своем браузере:

Hello World! rvm 1.6.5 by Wayne E. Seguin (wayneeseguin@gmail.com) [https://rvm.beginrescueend.com/]

Изменение на:

<code>get '/hi' do
  "<pre>#{ `which ruby` }
"end

отображает это в моем браузере:

/Users/greg/.rvm/rubies/ruby-1.9.2-p180/bin/ruby

Итак, в основном, у меня работает RVM на моемsystem и Ruby 1.9.2 - текущий Ruby. Попробуйте этот код, запустите его и посмотрите, получите ли вы вывод в своем браузере.

Также посмотрите, актуален ли ваш RVM. Он увеличился до 1.6.5 на прошлой неделеЕсли вы не используете текущий код:

rvm get head
rvm reload

РЕДАКТИРОВАТЬ:

Еще один тест, чтобы показать, какой Ruby запущен: Измените код на этот:

#!/usr/bin/env ruby

require 'sinatra'

get '/hi' do
  "Running using: #{RUBY_VERSION}<br>Ruby in path found at: #{ `which ruby` }"
end

и запустите его. Если ваш интерпретатор работает с установленным системой Ruby на MacOS или установкой по умолчанию для Ruby через apt-get, вы будете на 1.8.7. Я получаю:

Running using: 1.9.2
Ruby in path found at: /Users/greg/.rvm/rubies/ruby-1.9.2-p180/bin/ruby
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...