В 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 упаковал соответствующие зависимости.