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を準備するのに十分な時間があるように、適切なコマンドを追加する必要があります。

このタスクをより迅速に実行するために、コントローラ呼び出し間でファイル記述子設定をアクティブに保つ方法を知りたいです。

ベストアンサー1

おすすめ記事