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를 준비하는 데 충분한 시간이 있도록 해당 명령을 추가해야 합니다 .

이 작업을 더 빠르게 수행하기 위해 컨트롤러 호출 사이에 파일 설명자 구성을 활성 상태로 유지하는 방법을 알고 싶습니다.

관련 정보