我正在 Rails 中开发一个应用程序,它充当网络和应用程序监视器。我使用 Active Admin Dashboard 作为主页,显示我网络中每台服务器和一些应用程序的状态。我想将仪表板页面配置为每 x 分钟自动刷新一次,但我不知道在哪里配置此设置,因为我无法完全控制仪表板呈现的 html。有没有人设法做到这一点?
谢谢
我正在 Rails 中开发一个应用程序,它充当网络和应用程序监视器。我使用 Active Admin Dashboard 作为主页,显示我网络中每台服务器和一些应用程序的状态。我想将仪表板页面配置为每 x 分钟自动刷新一次,但我不知道在哪里配置此设置,因为我无法完全控制仪表板呈现的 html。有没有人设法做到这一点?
谢谢
在config/initializers/active_admin.rb你可以注册 javascripts:
config.register_javascript "/javascripts/admin-auto-refresh.js"
然后创建一个 admin-auto-refresh.js 来做这件事。
您还需要在 config/environments/production.rb 中注册 admin-auto-refresh.js
config.assets.precompile += "admin-auto-refresh.js"
更新:
添加了一些代码以在 5 秒后刷新页面。将此添加到/javascripts/admin-auto-refresh.js
$(function() {
setTimeout(location.reload(true), 5000);
})
这是最终代码,非常感谢@JesseWolgamott。
$(function() {
var sPath = window.location.pathname;
var sPage = sPath.substring(sPath.lastIndexOf('/') + 1);
if (sPage == 'admin'){
setTimeout("location.reload(true);", 10000);
}
})
下面是在页面不闪烁的情况下刷新的代码。它是通过在页面中至少有一个带有 needs_updating 类标记的元素来启用的。在加载的任何 javascript 中包含此代码片段,然后在页面上的任何位置添加标记。
唯一的缺点是这只会更新页面的 html 正文。
例如
show do |my_model|
...
if my_model.processing?
row :status, class: 'needs_updating' do
'we are working on it...'
end
else
row :status do
'ready'
end
end
....
end
所以如果模型仍在处理,那么你会得到类标签“needs_updating”,这将导致下面的javascript每10秒被调用一次
jQuery(document).ready(function($) {
if ($('.needs_updating').length > 0) {
console.log("we need some updating soon");
var timer = setTimeout(function () {
console.log("re-loading now");
$.ajax({
url: "",
context: document.body,
success: function(s,x) {
$(this).html(s);
if ($('.needs_updating').length == 0) {
clearInterval(timer);
}
}
});
}, 10000)
}
})