исполняемый файл gem, который запускает сервер sinatra не работает - PullRequest
1 голос
/ 30 июня 2011

Итак, я написал простой сайт "Hello World", используя sinatra:

#!/usr/bin/env ruby

# sinatra_demo/bin/sinatra_demo

require 'rubygems'
require 'sinatra'

get "/hello" do
  "Hello World!"
end

И когда я запускаю его, он работает, я могу отправить свой браузер на http://localhost:4567/hello и получить «Hello World»:

% sinatra_demo/bin/sinatra_demo
== Sinatra/1.2.6 has taken the stage on 4567 for development with backup from WEBrick
[2011-06-30 09:29:58] INFO  WEBrick 1.3.1
[2011-06-30 09:29:58] INFO  ruby 1.9.2 (2011-02-18) [x86_64-darwin10.7.4]
[2011-06-30 09:29:58] INFO  WEBrick::HTTPServer#start: pid=73620 port=4567
127.0.0.1 - - [30/Jun/2011 09:30:10] "GET /hello HTTP/1.1" 200 12 0.0027
localhost - - [30/Jun/2011:09:30:10 EDT] "GET /hello HTTP/1.1" 200 12
- -> /hello
127.0.0.1 - - [30/Jun/2011 09:30:10] "GET /favicon.ico HTTP/1.1" 404 447 0.0004
localhost - - [30/Jun/2011:09:30:10 EDT] "GET /favicon.ico HTTP/1.1" 404 447
- -> /favicon.ico
127.0.0.1 - - [30/Jun/2011 09:30:10] "GET /favicon.ico HTTP/1.1" 404 447 0.0003
localhost - - [30/Jun/2011:09:30:10 EDT] "GET /favicon.ico HTTP/1.1" 404 447
- -> /favicon.ico
^C
== Sinatra has ended his set (crowd applauds)
[2011-06-30 09:30:12] INFO  going to shutdown ...
[2011-06-30 09:30:12] INFO  WEBrick::HTTPServer#start done.

Однако, когда я пытаюсь упаковать его как драгоценный камень:

#!/usr/bin/env gem build

# sinatra_demo/sinatra_demo.gemspec

require 'rubygems'

Gem::Specification.new do |spec|
  spec.name = 'sinatra_demo'
  spec.summary = "A hello world webserver"
  spec.author = "rampion"
  spec.files = Dir['bin/*']
  spec.executables = ['sinatra_demo']
  spec.version = "1.0.0"
  spec.add_dependency('sinatra')
  spec.has_rdoc = false
end

Я могу установить драгоценный камень в порядке:

% sinatra_demo/sinatra_demo.gemspec
WARNING:  no description specified
WARNING:  no email specified
WARNING:  no homepage specified
  Successfully built RubyGem
  Name: sinatra_demo
  Version: 1.0.0
  File: sinatra_demo-1.0.0.gem
% gem install sinatra_demo-1.0.0.gem
Successfully installed sinatra_demo-1.0.0
1 gem installed
Installing ri documentation for sinatra_demo-1.0.0...
Installing RDoc documentation for sinatra_demo-1.0.0...

Но запуск установленного исполняемого файла не приводит к запуску веб-сервера

% which sinatra_demo
~/.rvm/gems/ruby-1.9.2-p180/bin/sinatra_demo
% sinatra_demo
%

Исполняемый файл gem запускается (из того, что я могу сказать с помощью операторов puts), но веб-сервер не запускается.

Что я делаю не так? ( список файлов, если вы хотите поиграть с ними )

Ответы [ 2 ]

5 голосов
/ 30 июня 2011

Вам нужно добавить

enable :run

в файл приложения, чтобы запустился встроенный веб-сервер.

Из Настройки конфигурации Sinatra :

По умолчанию этот параметр включен, только когда: app_file соответствует $ 0. т.е. при запуске файла приложения Sinatra напрямую с ruby ​​myapp.rb.

При непосредственном запуске файла это условие выполняется, поэтому веб-сервер запускается. Однако, когда он упакован как гем, исполняемый файл, который на самом деле выполняется, на самом деле является сценарием-оболочкой для файла приложения, созданного rubygems, поэтому условие ложно и веб-сервер не запускается.

0 голосов
/ 04 марта 2014

На тот случай, если кто-то еще окажется здесь, есть также вероятность того, что app.rb находится не в той папке, о которой вы думаете.

...