У меня есть простой сервер Ruby (Sinatra), который запускается без проблем из командной строки с ruby app.rb
.Но когда я выполняю ту же команду через мое приложение командной строки , либо с `ruby app.rb`
, либо с system("ruby app.rb")
, я получаю эту ошибку:
app.rb:1:in `require': cannot load such file -- sinatra (LoadError)
from app.rb:1:in `<main>'
Открывающая строка app.rb
это просто require 'sinatra'
.Конечно же, в моей системе установлен камень Синатры;Я не понимаю, почему интерпретатор действует так, как будто его там нет.
При устранении неполадок я решил добавить Синатру в Gemfile приложения командной строки, которое вызывает app.rb
.И вот, теперь, когда родительский процесс имеет доступ к Sinatra, теперь он работает (то есть, system(app.rb)
успешно запускает сервер Sinatra).Но когда я выхожу из приложения командной строки, сервер Sinatra всегда там, говоря:
[2018-12-18 23:17:37] INFO WEBrick 1.3.1
[2018-12-18 23:17:37] INFO ruby 2.4.0 (2016-12-24) [x86_64-linux]
== Sinatra (v2.0.4) has taken the stage on 4567 for development with backup from WEBrick
[2018-12-18 23:17:37] INFO WEBrick::HTTPServer#start: pid=27384 port=4567
Поэтому мне нужно Ctrl-c, чтобы выйти из приложения командной строки.
Вопрос:есть способ порождать независимый процесс / сервер Sinatra, как я пытался сделать с system("ruby app.rb")
, не устанавливая его в родительское приложение (приложение командной строки)?Я также пытался использовать Process.fork, а затем Process.wait, но это не помогло.