我正在尝试用奥卡拉将REST应用程序打包到一个可执行文件中。我的脚本中需要一些宝石:
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,就无法加载这样的文件
当我手动中断服务器时,我还必须调用几个api端点来包含所有内容。
我想我的选择是:
ocra server.rb --gem-full=rack --gem-full=grape,它可以启动我的服务器,但是当调用API时,‘齿条/挂载/strexp’又丢失了。Rack::Server.start options添加一个块,只有当我中断服务器时,它才会继续。有没有任何想法来实现这两种选择,或者有其他的解决方案?
发布于 2015-12-11 14:16:22
如果我们使用一个齿条处理程序(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包具有适当的依赖项。
https://stackoverflow.com/questions/34221899
复制相似问题