我有一个现有的Rails应用程序。我希望使用此应用程序从Windows计算机中的COM 1端口获取串口数据,但由于Heroku是一个运行在Linux服务器上的基于云的平台,因此无法从运行Heroku应用程序的本地机器上获取串口数据。如果我在Windows机器上运行独立的Ruby代码,那么它就可以正常工作,并且能够获得我想要的数据。
我收到以下错误
Unable to open COM1我该如何解决这个问题?
Rails应用程序中访问串口数据的部分代码是:
port_str = 'COM1' #may be different for you
baud_rate = 2400
data_bits = 8
stop_bits = 1
parity = SerialPort::NONE
sp = SerialPort.new(port_str, baud_rate, data_bits, stop_bits, parity)
i=sp.gets.chomp
puts i如果我在本地机器上运行,这段代码运行良好。‘序列化港’宝石在我的宝石档案里。
发布于 2017-05-02 10:10:54
Rails是一种在web服务器上运行的web服务器技术。它构建HTML页面,这些页面被发送到客户端计算机并由浏览器呈现。
当您在本地运行Rails时,您是在模仿真正的web服务器-- localhost基本上是在本地计算机上运行web服务器。这就是为什么您可以在Rails应用程序中欺骗和使用Ruby代码,这些代码可以在本地访问本地计算机的端口,但是一旦在真正的web服务器上运行Rails应用程序(比如Heroku),您就不能这样做,所以您有错误的工具来完成您想要做的工作。
不仅如此,因为Rails是一种web技术,所以您有一个运行在浏览器中的web应用程序,并且您无法从web浏览器轻松地访问客户端机器上的端口。有关这方面的更多信息在"How to read serial port data from JavaScript“中。
Ruby代码能够访问端口的唯一原因是,当您在本地主机上运行时,它不在浏览器中运行,而是运行在本地主机上的web服务器中,因此当应用程序在真正的web服务器上运行时,Ruby代码将尝试访问服务器的端口,而不是任何客户端机器。
https://stackoverflow.com/questions/43719211
复制相似问题