首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如果没有调用rack/葡萄api端点,OCRA缺少库的子模块

如果没有调用rack/葡萄api端点,OCRA缺少库的子模块
EN

Stack Overflow用户
提问于 2015-12-11 10:58:08
回答 1查看 126关注 0票数 1

我正在尝试用奥卡拉将REST应用程序打包到一个可执行文件中。我的脚本中需要一些宝石:

代码语言:javascript
复制
require 'rack'
require 'rack/server'
require 'grape'
require 'grape-entity'
require 'rubygems'

我跳过使用以下内容启动服务器:

代码语言:javascript
复制
if not defined?(Ocra)
    Rack::Server.start options
end

当我尝试运行我的server.exe时:

代码语言:javascript
复制
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包括所有的子模块,但是编译这个列表有点费时,而且会增加文件的大小。 我已经尝试过ocra server.rb --gem-full=rack --gem-full=grape,它可以启动我的服务器,但是当调用API时,‘齿条/挂载/strexp’又丢失了。
  • 在我的脚本中调用API,但我不知道如何做到这一点。我不能向Rack::Server.start options添加一个块,只有当我中断服务器时,它才会继续。

有没有任何想法来实现这两种选择,或者有其他的解决方案?

EN

回答 1

Stack Overflow用户

发布于 2015-12-11 14:16:22

如果我们使用一个齿条处理程序(webrick / thin / else)来运行齿条应用程序,我们可以在另一个线程中关闭服务器,以便ocra能够完成打包(不知道如何使用Rack::Server完成相同的工作)。

代码语言:javascript
复制
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包具有适当的依赖项。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34221899

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档