ruby-on-rails - 如何抑制使用 fork/exec 创建的子进程的任何输出

标签 ruby-on-rails testing exec fork

在测试用例 (ActionDispatch::IntegrationTest) 中,我必须启动一个 Rails 服务器实例。

这是启动 Rails 服务器的代码:

@@rails_server_proc = fork do
  Signal.trap("QUIT") { puts "Killing rails server"; exit }
  $stdout = nil
  exec("rails s -e test --port #{@@port}", [:out, :err] => "/dev/null")
end
Process.detach(@@rails_server_proc)

工作正常,但我找不到抑制 Rails 服务器的 STDOUT 的方法。

[:out, :err] => "/dev/null" 没有效果,我的测试输出中仍然得到服务器输出,如下所示:

Booting Thin
=> Rails 3.2.11 application starting in test on http://0.0.0.0:3002
=> Call with -d to detach
=> Ctrl-C to shutdown server
...

有什么想法吗?

最佳答案

尝试:

exec("rails s -e test --port #{@@port} >/dev/null 2>&1")

关于ruby-on-rails - 如何抑制使用 fork/exec 创建的子进程的任何输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22628318/

相关文章:

ruby-on-rails - 无法让 bundle exec 在生产中工作

ruby-on-rails - Heroku:高效的图像、样式表和 Javascript 缓存

ruby-on-rails - resque-pool 默认为测试环境

c# - 如何设置测试项目(命名空间、有用的辅助对象等)?

ruby - 无法激活 rspec-2.12.0,因为 rspec-core-2.13.1 与 rspec-core 冲突 (~> 2.12.0)

diff - tcl:捕获 "exec diff"的输出,该输出返回非零

mysql - 警告 : system() [function. 系统]:无法在第 19 行执行空白命令

ruby-on-rails - 如何仅在 pull 请求中更改的文件上运行 Rubocop?

node.js - 使用nodemailer发送邮件,需要的步骤

exec - 如何从 Kotlin 代码中调用外部命令?