如何在 ruby​​ 中控制(启动/终止)后台进程(服务器应用程序)

2024-02-14

我正在尝试通过 ruby​​ 设置一个用于集成测试(实际上是规格)的服务器,但不知道如何控制该过程。

所以,我想做的是:

  1. 为我的 gem 运行一个 rake 任务来执行集成规范
  2. 该任务需要首先启动服务器(我使用 webrick),然后运行规范
  3. 执行规范后,它应该杀死 webrick,这样我就不会留下一些未使用的后台进程

webrick 不是必需的,但它包含在 ruby​​ 标准库中,因此能够使用它会很棒。

希望任何人都能够提供帮助!

附注我在 Linux 上运行,所以在 Windows 上进行这项工作不是我的主要优先事项(现在)。


标准方法是使用系统函数fork(复制当前进程)、exec(用可执行文件替换当前进程)和kill(向进程发送信号以终止它)。

例如 :

pid = fork do
  # this code is run in the child process
  # you can do anything here, like changing current directory or reopening STDOUT
  exec "/path/to/executable"
end

# this code is run in the parent process
# do your stuffs

# kill it (other signals than TERM may be used, depending on the program you want
# to kill. The signal KILL will always work but the process won't be allowed
# to cleanup anything)
Process.kill "TERM", pid

# you have to wait for its termination, otherwise it will become a zombie process
# (or you can use Process.detach)
Process.wait pid

这应该适用于任何类 Unix 系统。 Windows 以不同的方式创建进程。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 ruby​​ 中控制(启动/终止)后台进程(服务器应用程序) 的相关文章

  • 当 config.cache_classes = true 时缺少方法

    我有两个名为 Scope 和 ScopeItem 的 ActiveRecord 模型 具有 has many 关系 class Scope lt ActiveRecord Base has many scope items end clas
  • Ruby 依赖注入库

    我一直在研究一些 Ruby 依赖注入库 特别是 我检查了Needle http needle rubyforge org and Copland http copland rubyforge org 它们已经存在很长一段时间了 但用途并不多
  • 如何在 .js 中的字符串中插入来自 ruby​​ 示例的变量[重复]

    这个问题在这里已经有答案了 在 ruby 中 您可以将变量插入到字符串中 如下所示 x sake puts I like x I like sake 例如 def what i like word I like word end 在 jav
  • 如何使用 Nokogiri 获取某些标签之后或之前的文本

    我有一个 HTML 文档 如下所示
  • 为什么这个 Ruby 方法返回“空值表达式”错误?

    我有这个简单的方法 def is palindrome sentence raise ArgumentError new expected string unless sentence is a String safe sentence s
  • 使用 node.js 获取正在运行的进程的 stdin/stdout

    我正在从节点启动一个进程child process spawn http nodejs org docs v0 6 1 api child processes html child process spawn处理 process stdou
  • sleep 0 有特殊含义吗?

    我看到很多用法sleep 0在我的一个客户项目中 代码看起来像这样 while true sleep 0 end 阅读一些像这样的答案this https stackoverflow com questions 3727420 signif
  • 如何在 Rails 控制器中调用通道方法?

    我有一个订阅用户的 ActionCable 方法 如果启动新的 convo 我也希望用户订阅新频道 我无法找出在控制器中调用通道方法的正确语法 更新 问题是消息在发送时附加到聊天框 但是当发送第一条消息时 Websocket 连接尚未建立
  • 从 Ruby 中的 DateTime 变量获取时间

    我在 ruby 中工作 我有一个包含数据库中今天的日期时间的对象 我只想要时间截断数据 我怎样才能得到那个 Try 日期时间 strftime http www ruby doc org stdlib 1 9 3 libdoc date r
  • Watir 更改 Mozilla Firefox 首选项

    我正在使用 Watir 运行 Ruby 脚本来自动执行一些操作 我正在尝试自动将一些文件保存到某个目录 因此 在我的 Mozilla 设置中 我将默认下载目录设置为桌面并选择自动保存文件 然而 当我开始运行脚本时 这些更改并未反映出来 似乎
  • 如何从 Rails 中的 date_select 或 select_date 获取日期?

    Using select date给我回一个params my date with year month and day属性 如何轻松获取 Date 对象 我希望有类似的事情params my date to date 我很高兴使用date
  • Rails 4:资产未在生产中加载

    我正在尝试将我的应用程序投入生产 但图像和 CSS 资源路径不起作用 这是我目前正在做的事情 图像资源位于 app assets images image jpg 样式表位于 app assets stylesheets style css
  • 如何使用本地安装的gems执行Ruby程序?

    我已经使用安装了我的依赖项 bundle package 然后将它们传输到离线服务器并运行 gt bundle install local Using mime types 1 19 Using rest client 1 6 7 Usin
  • 拆分字符串以仅获取前 5 个字符

    我想去那个地点 var log src ap kernelmodule 10 001 100 但看起来我的代码必须处理 ap kernelmodule 10 002 100 ap kernelmodule 10 003 101 等 我想使用
  • 使用 VCR 过滤敏感数据

    我正在使用 VCR gem 记录 http 交互并在将来重播它们 我想过滤掉 uri 请求中的实际密码值 以下是 uri 的示例 http services somesite com Services asmx Cabins Usernam
  • Rails/Nginx 中的超时——最佳实践

    我正在开发一个应该在 Nginx 服务器上运行的 Rails 应用程序 根据输入 应用程序可能需要很长时间来处理请求 或者在出现错误时挂起 因此我想防止进程永远运行 除了确保客户端收到超时信号的 Nginx 配置之外 我想我可能仍然需要确保
  • 我在 Rails 中使用了保留字吗?

    这是我的模型 class Record lt ActiveRecord Base belongs to user belongs to directory end class Directory lt ActiveRecord Base h
  • Rails - 渲染:目标锚标记的操作?

    我希望像这样使用渲染 render action gt page form 我也尝试过这个 render template gt site page form 那也没用 这个特定页面上的表单位于最底部 如果提交时发生任何错误 我不希望用户被
  • ruby从1.8.7升级到1.9.2(使用Rails 3.1.1)后本地服务器错误

    我刚刚安装了rvm并使用rvm将ruby从1 8 7升级到1 9 2 我在我的应用程序上运行了捆绑安装 它重新安装了我的 gems 当我在本地运行 Rails 服务器并将浏览器导航到 localhost 3000 时 服务器日志中显示以下错
  • 红宝石接球和效率

    catch在 Ruby 中意味着跳出深度嵌套的代码 在 Java 中 例如用Java也可以达到同样的效果try catch用于处理异常 但它被认为是糟糕的解决方案 而且效率非常低 在 Ruby 中 我们有处理异常的方法begin raise

随机推荐

  • Java接口实现对象?

    是否有 Java 接口隐式实现 java lang Object 当我做这样的事情时出现了这个问题 public static String sizeSort String sa Comparator
  • 在 bash_profile 中设置路径

    为什么设置一个PATH要求 PATH 在最后 PATH Library Frameworks Python framework Versions 2 7 bin PATH 当我附加一条路径时我会这样做 PATH PATH 我如何附加一个PA
  • pylab/networkx;更新后不显示节点标签

    将 matplotlib 更新到当前版本后 我遇到了 networkX 中节点标签的问题 如果我使用nx draw G 命令 我得到一个图表 但没有显示标签 但我们还是举个例子吧 import networkx as nx import m
  • 计算已用时间的 Bash 脚本

    我正在 bash 中编写一个脚本来计算执行命令所用的时间 请考虑 STARTTIME date s command block that takes time to complete ENDTIME date s echo It takes
  • 如何在 p:calendar 中使用 java.time.ZonedDateTime / LocalDateTime

    我一直在 Java EE 应用程序中使用 Joda Time 进行日期时间操作 其中关联客户端提交的日期时间字符串表示形式在将其提交到数据库之前已使用以下转换例程进行转换 即在getAsObject JSF 转换器中的方法 org joda
  • Xampp MySQL 未启动 - “MYSQL 未在 XAMPP 3.2.1 版本上启动...”

    我在我的笔记本电脑上安装了 xampp 版本 3 2 1 之前 mysql 工作正常 但突然 mysql 停止工作 而 apache 和其他人正在工作 当我单击启动 mysql 时 它显示此错误 我使用 Windows 10 8 52 32
  • 我在尝试发送消息时收到错误

    send setOnClickListener new OnClickListener Override public void onClick View v TODO Auto generated method stub URI uri
  • KendoUI 网格默认值与数据注释

    我将 Kendo UI Grid 与 ASP NET MVC Helpers 和自动生成的列一起使用 I have DefaultValue 60 60 我的视图模型中存在注释 但 Kendo 助手似乎并不尊重这一点 我可以指定默认值 可能
  • 如何将 Observable 序列化到云端并返回

    我需要分割处理序列 就像在这个问题中如何使用 net RX 组织数据处理器的序列 https stackoverflow com q 13310865 296494 到 Azure 环境中的多个计算单元 这个想法是将 Observable
  • 如何在 android 10 - android Q - MIUI 11 中从后台启动活动

    我在真实设备上的 android 10 android Q MIUI 11 中从后台启动活动时遇到问题 在这个线程中 在android 10中启动活动背景 https stackoverflow com a 59421118 1006090
  • Java Selenium WebDriver 找不到表单字段

    我正在测试一个注册页面 并且尝试了名称 xpath id 类 但似乎没有任何效果 这是我的硒代码 driver findElement By id pushMenu click Thread sleep 2000 driver findEl
  • CALayer + NSOutlineView/NSTableView

    问题是 基于视图的 NSOutlineView 或 NSTableView 两者都有这个问题 包含一个托管 CALayer 的自定义控件 用于自定义动画目的 调整大纲视图大小时或删除行 动画删除 后 CALayer 会在错误的位置绘制 这是
  • 检测光盘是否在 DVD 驱动器中

    有没有简单的方法来检测 DVD 驱动器中是否插入了光盘 我不在乎哪种光盘 CD DVD 或蓝光 使用 WMI 检测磁盘是否在 CD DVD 驱动器中 foreach var drive in DriveInfo GetDrives Wher
  • AngularJS - 等待多个资源查询完成

    我有一个用 ngResource 定义的工厂 App factory Account function resource return resource url query method GET 我正在多次调用该工厂中定义的查询方法 这些调
  • 查找两组整数的所有成对 OR 的集合

    给定两个集合 每个集合都包含整数值 如何找到包含所有可能的成对值的集合ORs这两组的值 例如 所有数字都是二进制 1 10 x 100 1000 101 1001 110 1010 1 10 x 11 101 11 101 111 第一个示
  • Excel:将秒转换为 dd 天 hh:mm:ss 格式

    我想将秒转换为 dddays时 分 秒 这就是我所拥有的 我有一个单元格 A1 其值为 457003 在单元格 B1 中我正在执行 Text A1 24 60 60 dd hh mm ss 并且它返回 05 06 56 43 我要找的是 0
  • 在 PowerShell 中添加数字

    我正在尝试在 PowerShell 中将两个数字相加 我将用户提供的输入存储在 Value1 and Value2 但是我找不到任何方法来实际将这些数字相加 我尝试使用Measure Objectcmdlet 但我似乎无法让它工作 如何在
  • 未捕获的类型错误:THREE.MTLLoader 不是构造函数 2.0

    我之前在这里问过这个问题 未捕获的类型错误 THREE MTLLoader 不是构造函数 https stackoverflow com questions 46989337 uncaught typeerror three mtlload
  • cygwin 将文件权限设置为 000

    我有一个文件夹 cygwin d myfolder 每次我在那里保存文件时 如果我从 cygwin 执行 ls la 我会看到这些文件被授予权限 000 这实际上给我带来了很多问题 因为我将此文件夹同步到我的服务器 并且没有一个文件可访问
  • 如何在 ruby​​ 中控制(启动/终止)后台进程(服务器应用程序)

    我正在尝试通过 ruby 设置一个用于集成测试 实际上是规格 的服务器 但不知道如何控制该过程 所以 我想做的是 为我的 gem 运行一个 rake 任务来执行集成规范 该任务需要首先启动服务器 我使用 webrick 然后运行规范 执行规