Проблемы с Синатрой и Руби 1.9.2 на дробовике - PullRequest
5 голосов
/ 03 декабря 2010

У меня есть простое приложение sinatra.

require 'rubygems'
require 'sinatra'

get '/' do
  "Hello"
end

Когда я запускаю его на дробовике, я получаю следующую ошибку:

Ошибка загрузки

Что-то пошло не так при загрузке simple.rb

LoadError: нет такого файла для загрузки - simple.rb

: 29: в require' <internal:lib/rubygems/custom_require>:29:in требуется» /home/thedinga/.rvm/gems/ruby-1.9.2-p0@global/gems/shotgun-0.8/lib/shotgun/loader.rb:114:in inner_app' /home/thedinga/.rvm/gems/ruby-1.9.2-p0@global/gems/shotgun-0.8/lib/shotgun/loader.rb:102:in assemble_app» /home/thedinga/.rvm/gems/ruby-1.9.2-p0@global/gems/shotgun-0.8/lib/shotgun/loader.rb:86:in proceed_as_child' /home/thedinga/.rvm/gems/ruby-1.9.2-p0@global/gems/shotgun-0.8/lib/shotgun/loader.rb:31:in позвони!» /home/thedinga/.rvm/gems/ruby-1.9.2-p0@global/gems/shotgun-0.8/lib/shotgun/loader.rb:18:in call' /home/thedinga/.rvm/gems/ruby-1.9.2-p0@global/gems/shotgun-0.8/lib/shotgun/favicon.rb:12:in вызов» /home/thedinga/.rvm/gems/ruby-1.9.2-p0@global/gems/rack-1.2.1/lib/rack/builder.rb:77:in call' /home/thedinga/.rvm/gems/ruby-1.9.2-p0@global/gems/rack-1.2.1/lib/rack/content_length.rb:13:in вызов» /home/thedinga/.rvm/gems/ruby-1.9.2-p0@global/gems/rack-1.2.1/lib/rack/handler/webrick.rb:52:in service' /home/thedinga/.rvm/rubies/ruby-1.9.2-p0/lib/ruby/1.9.1/webrick/httpserver.rb:111:in сервис» /home/thedinga/.rvm/rubies/ruby-1.9.2-p0/lib/ruby/1.9.1/webrick/httpserver.rb:70:in run' /home/thedinga/.rvm/rubies/ruby-1.9.2-p0/lib/ruby/1.9.1/webrick/server.rb:183:in блок в start_thread '

Если бы я использовал ruby simple.rb вместо дробовика, я получил бы вывод, который вы ожидаете в браузере. Как примечание, если я отправлю его в Heroku (на котором я действительно хотел бы запустить приложение sinatra), Heroku также не сможет запустить приложение. Это проблема с версией 1.9.2? или я что-то упускаю?

Ответы [ 5 ]

8 голосов
/ 04 декабря 2010

приведенный выше код работает, просто исправьте require '# {path} / myapp' в файле config.ru, указав "# {path} / myapp".

В ruby ​​можно использовать только строки с "caracter"inner # {}. В строке с символом 'caracter строка будет продолжать быть' # {path} / myapp ', а не' value / of / path / variabel / myapp '.

Так что это можно сделать так:следующая

# FILE config.ru

path = File.expand_path "../", __FILE__

require 'rubygems'
require 'sinatra'
require "#{path}/myapp"

run Sinatra::Application


# FILE myapp.rb

get '/' do
  'hello'
end

помечает приложение, просто запустив команду дробовика в корневом каталоге приложения

3 голосов
/ 03 декабря 2010

Вы пытались отделить конфиг от самого приложения?

Мой шаблон похож на

# FILE config.ru

path = File.expand_path "../", __FILE__

require 'rubygems'
require 'sinatra'
require '#{path}/myapp'

run Sinatra::Application


# FILE myapp.rb

get '/' do
  'hello'
end

# FILE start.sh

shotgun -o 0.0.0.0 -p 8888 &

Это с ruby1.9.2-p0 ..

2 голосов
/ 10 февраля 2011

Быстрое решение этой проблемы обсуждается на странице вопросов о дробовике на github .

$ shotgun -I. simple.rb
1 голос
/ 05 декабря 2010

My config.ru обычно намного проще:

root = ::File.dirname(__FILE__)
require ::File.join( root, 'app' )

# Assuming your application is subclassed from Sinatra::Application
run MyApp.new 

Файл app.rb может (и должен) требовать Синатры (и рубинов, если вы не на 1.9).

0 голосов
/ 10 февраля 2011

Я использую Ruby 1.9.2 и Sinatra, а также у меня проблемы с запуском Shotgun.Есть простой обходной путь: используйте sinatra-repeater самоцвет вместо дробовика.Установка и настройка описаны в Sinatra Book: http://sinatra -book.gittr.com / # automatic_code_reloading

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...