我维护一个使用Ruby on Rails构建的系统。当特定用户没有互联网连接时,客户端要求我阻止系统工作。
你会怎么做?
我需要检查一台特定的电脑是否有互联网连接! 例如,如果我的电脑或您的电脑或我母亲的电脑没有网络连接!
答案 0 :(得分:0)
这与Ruby on Rails无关。
此用户是否访问了本地网络上但没有外部互联网访问权限的网站?如果是这样,您可以在主页上使用before_filter
或某种方法尝试ping google.com
或局域网外的其他网站以检查互联网。
答案 1 :(得分:0)
//= require offline.min
在同一个application.js文件中添加以下代码
$(document).ready(function() {
Offline.check();
Offline.on('up', function() {
$('a.btn').removeClass('disabled');
});
Offline.on('down', function() {
$('a.btn').addClass('disabled');
});
});
这与我的代码相关,我只是在连接关闭时禁用所有按钮。
Offline.js的默认行为会添加一个带有请等待消息的叠加层,直到互联网连接重新开启。
我更喜欢以这种方式处理它,因为它可以提供更好的用户体验。禁用按钮是阻止用户工作的一种微妙方式。
答案 2 :(得分:0)
所以只是为了澄清一下,您的Rails应用程序存在,用户可以将食品交付请求发送给一个特定的用户 - 商店准备并发送食物,大概是 - 并且您希望用户在以后无法创建新的递送请求商店/店主目前不在线上?
实现此目标的最简单方法是拥有一个管理员仪表板区域,所有者可以单击按钮“打开商店”并允许新订单。因此,担心的是商店的连接脱机,导致客户的订单从未收到过。为了解决这个问题,您可以让每个客户订单以“未确认”状态开始;当提交新订单时,会通知所有者,并且他可以单击按钮进行确认,让用户知道是,他们的订单已被看到并且正在进行(并且他们的信用卡可以被收取然后,如果您有在线支付)。这可能是最可靠的解决方案,因为您真正想要的是确认人类已经确认订单。
如果您 想要将其直接绑定到在线状态,那么您可以定期检查管理仪表板页面是否正在查看它。您可以使用websockets连接see Action Cable introduced in Rails 5来完成此操作。 Admin Dashboard页面在登录时打开websocket连接;新连接事件设置accepting_orders = true
。 websocket disconnect事件设置accepting_orders = false
,它将在连接断开后很快发生(确保检查超时设置)。如果没有websockets,您可能会在一个时间间隔内发生后台HTTP请求;没有收到该请求的 x 秒可能导致Rails停止接受新订单。