在 Rails 上执行的 Bash 命令在 http 请求之间丢失文件描述符

在 Rails 上执行的 Bash 命令在 http 请求之间丢失文件描述符

我有一个 arduino,我想通过 Rails api 发送短信。因此,直接在终端上,就像为 arduino 端口创建文件描述符一样简单:

exec 3<> /dev/ttyACM0

然后,我可以发送任何消息,例如:

echo "Beautiful blue sky floating endlessly in love making the clouds sigh.">&3

现在,我尝试使用系统方法在我的 Rails api 上实现这个想法:

api/config/application.rb

class Application < Rails::Application 
  ...
  # This is for declaring the file descriptor when the rails server is on.
  system 'exec 3<> /dev/ttyACM0;'
end

应用程序/控制器/message_controller.rb

class MessageController < ApplicationController
  def send
    system "echo \"#{params[:message]}\">&3;"
    render json: '', status: :ok
  end
end

...但是,这sh: 3: Bad file descriptor在终端上向我抛出了一条消息。

我勉强让它工作改变控制器上的系统执行,如下所示:

system "exec 3<> /dev/ttyACM0; sleep 2; echo \"#{params[:message]}\">&3;"

但我需要添加该sleep命令,以便有足够的时间来准备 arduino 来捕获输入数据。

为了使这项工作更快,我想知道一种在调用控制器之间保持文件描述符配置处于活动状态的方法。

相关内容