我有一个外部程序运行本地API,设置为在端点被击中时播放wav文件。
在我的开发环境中,它工作正常,但是当我推向现场环境时,它不再起作用。
我错过了什么吗?
谢谢!
JqueryController
def playfile
require 'json'
HTTParty.get("http://192.168.1.161:5000/play/98")
response = HTTParty.get("http://192.168.1.161:5000/play/#{params[:id]}")
parsed = JSON.parse(response)
@message = params[:message]
Hint.first.update_attributes(message:@message)
if parsed['success'] == true
@success = "Success"
else
@success = "Failed"
end
end
视图
=form_tag("/jquery/playfile", method: 'post', remote:true) do
= label_tag 'hints on the tv!'
= hidden_field_tag :id , 39
=render 'layouts/play'
当我点击端点时... googles督察显示“待处理”请求,最终死亡,并返回应用程序错误响应(来自heroku)
我猜它与不允许从现场网站点击本地主机地址有关。有没有办法解决这个问题?
答案 0 :(得分:4)
您无法从互联网(heroku)访问您的局域网。
如果你在http://192.168.1.161:5000/play/98
进行GET,那么heroku将在自己的网络中进行搜索..
解决方案1:
建立一个链接(<a href="http://192.168.1.161:5000/play/98"></a>
)。
如果你从局域网中点击该链接,这将有效。 (如果要重定向到生产站点,可以使用redirect_back
。
解决方案2:
从http://192.168.1.161:5000/play/98
设备制作隧道。
例如,您可以使用ngrok执行此操作。
然后,您就可以使用来自heroku的HTTP Party发出GET请求。
HTTParty.get("http://<ngrok-hash>.ngrok.com/play/98")
注意:对于两种解决方案,您需要在http://192.168.1.161:5000/play/98上运行服务器