В OCRA отсутствуют подмодули библиотек, если не называются конечные точки rack/grape api

Я пытаюсь упаковать мое REST-приложение в исполняемый файл с OCRA. У меня есть несколько драгоценных камней, необходимых в моем сценарии:

require 'rack'
require 'rack/server'
require 'grape'
require 'grape-entity'
require 'rubygems'

Я пропускаю запуск сервера с этим:

if not defined?(Ocra)
    Rack::Server.start options
end

Когда я пытаюсь запустить свой server.exe:

Temp/../server.rb:221:in `default_middleware_by_environment': 
cannot load such file -- rack/content_length (LoadError)

Это означает, что он не обнаруживает субмодули стойки, которые существуют, но не используются и, следовательно, не включены. Если я добавлю require 'rack/content_length' it continues withне могу загрузить такой файл - rack / chunkedEven` и так далее.

Когда я вручную прервал свой сервер, мне также пришлось вызывать несколько конечных точек API, чтобы все было включено.

Я думаю, что мои варианты:

  • Скажите OCRA включить все подмодули стойки и винограда, но составление этого списка занимает немного времени и увеличит размер файла

    Я уже пробовала ocra server.rb --gem-full=rack --gem-full=grape, который запускает мой сервер, но при вызове API Rack/mount/strexp снова отсутствует..

  • Вызов API в моем скрипте, но я не мог понять, как это сделать. Я не могу добавить блок в Rack::Server.start options и это только продолжается, когда я прерываю сервер.

Любые идеи для реализации любого варианта, или есть другое решение?

1 ответ

Если мы запустим приложение стойки с обработчиком стойки (webrick / thin / else), мы можем отключить сервер в другом потоке, чтобы ocra могла завершить упаковку (не знаю, как сделать то же самое с Rack::Server).

app     = Rack::Directory.new ENV['HOME'] # a sample app
handler = Rack::Handler.pick %w/ thin webrick /
handler.run app do |server|
  # handler.run yields a server object,
  # which we shutdown when ocra is packing
  if ocra_is_packing # replace with proper condition
    Thread.new { sleep 10; server.shutdown }
  end
end

Возможно, вам придется сделать что-то еще (получить доступ к серверу и т. Д.), Чтобы ocra упаковал соответствующие зависимости.

Другие вопросы по тегам