我对ruby非常新,我正在尝试设置测试仪表板。我看到mysql给出了sql查询的总数。然而它没有填充在小部件上。有人可以帮忙吗?
# mysql.rb (jobs file)
require "mysql2"
SCHEDULER.every '5s' do
client = Mysql2::Client.new(:host => "192.168.1.3",:username => "testuser",:database => 'testdb')
results=client.query("SELECT count(*) as total from testdb.share")
puts results
results.each do |row|
puts row['total']
send_event('totals', { value: total })
end
end
仪表板文件:
# sample.erb
<li data-row="1" data-col="1" data-sizex="1" data-sizey="1">
<div data-id="totals" data-view="Number" data-title="Number of Shares" data-moreinfo="Shares" data-prefix="$"></div>
</li>
....
Dashing控制台显示如下
#<Mysql2::Result:0x007f98b4b85d18>
3 --->>>> This is the count of my mysql query
调度程序被捕异常:
> undefined local variable or method `total' for main:Object
> /home/user/.rvm/sweet_dashboard_project/jobs/mysql.rb:20:in `block (2
> levels) in <top (required)>'
> /home/user/.rvm/sweet_dashboard_project/jobs/mysql.rb:11:in `each'
> /home/user/.rvm/sweet_dashboard_project/jobs/mysql.rb:11:in `block in
> <top (required)>'
> /home/user/.rvm/gems/ruby-2.2.1/gems/rufus-scheduler-2.0.24/lib/rufus/sc/jobs.rb:230:in
> `call'
> /home/user/.rvm/gems/ruby-2.2.1/gems/rufus-scheduler-2.0.24/lib/rufus/sc/jobs.rb:230:in
> `trigger_block'
> /home/user/.rvm/gems/ruby-2.2.1/gems/rufus-scheduler-2.0.24/lib/rufus/sc/jobs.rb:204:in
> `block in trigger'
> /home/user/.rvm/gems/ruby-2.2.1/gems/rufus-scheduler-2.0.24/lib/rufus/sc/scheduler.rb:430:in
> `call'
> /home/user/.rvm/gems/ruby-2.2.1/gems/rufus-scheduler-2.0.24/lib/rufus/sc/scheduler.rb:430:in
> `block in trigger_job'
答案 0 :(得分:0)
问题在于:
results.each do |row|
puts row['total']
send_event('totals', { value: total })
end
检查第send_event('totals', { value: total })
行。您将value
设置为total
,但您尚未在任何地方设置该变量或方法(即total
),因此undefined local variable or method
错误。
它认为您想要分配row['total']
:
results.each do |row|
puts row['total']
send_event('totals', { value: row['total'] })
end
<强>更新强>
要显示窗口小部件中的值,您必须使用current
而不是value
来获取正确的绑定(在send_event()
中),因此上面的代码变为:
results.each do |row|
puts row['total']
send_event('totals', { current: row['total'] })
end
另一种方法是在源文件current
中将value
更改为widgets/number/number.html
。
所以这一行:
<h2 class="value" data-bind="current | shortenedNumber | prepend prefix | append suffix"></h2>
会变成:
<h2 class="value" data-bind="value | shortenedNumber | prepend prefix | append suffix"></h2>
虽然我不推荐这样做,但最好保留默认值(即current
)。