Dashing (Ruby) Nokogiri LoadError

Я работал над панелью инструментов в Dashing framework, и сейчас я пытаюсь создать небольшой сканер для сбора конкретных данных в Jenkins-CI и передачи их виджету Number. Вот сканер (это просто заглушка, он подсчитывает количество элементов "p" на html-странице заглушки):

require 'nokogiri'
require 'open-uri'

class ActiveBuilds

      def initialize()
          @jenkins_page = nil
          @build_count = nil
      end

      # !STUB! Gets the jenkins page to parse to XML on Nokogiri
      @jenkins_page = Nokogiri::HTML(open("http://localhost:80"))

      # !STUB! Counts the number of 'p' items found on the page
      @build_count = @jenkins_page.css("p").length

      # !STUB! Returns the amount of active builds
      def amountOfActiveBuilds
          return @build_count
      end
end

и для справки, на самом деле не обязательно, это HTML-страница:

<!DOCTYPE html>
<html>
  <head>
 <meta charset="UTF-8">
    <title>Number Stub | Project</title>
  </head>
  <body>
    <h1>Test</h1>
    <ul>
    <!-- Count these -->
       <li> <div> <p>Item 1 </div>
       <li> <div> <p>Item 2 </div>
       <li> <div> <p>Item 3 </div>
       <li> <div> <p>Item 4 </div>
       <li> <div> <p>Item 5 </div>
           <!-- Stop counting -->
       <li> <div> Item 6 </div>
       <li> <div> Item 7 </div>
     </ul>
   </body>
</html>

и теперь, измененный, измененный файл jobs/sample.rb (единственное, что имеет значение, это сборка / оценка):

require './ActiveBuilds.rb'

active_builds = ActiveBuilds.new
current_valuation = active_builds.amountOfActiveBuilds
current_karma = 0

SCHEDULER.every '2s' do
  last_valuation = current_valuation
  last_karma     = current_karma
  current_karma  = rand(200000)

  send_event('valuation', { current: current_valuation, last: last_valuation })
  send_event('karma', { current: current_karma, last: last_karma })
  send_event('synergy', { value: rand(100) })

end

Дело в том, что до того, как у меня это заработало, он получал страницу на localhost, подсчитывал количество элементов "p" и печатал ее в файле, а затем лихой файл читал и отображал ее правильно, но это не так. t обновить значение на приборной панели, если я не перезапущу его, что противоречит цели этой платформы.

Теперь к ошибкам:

При попытке скомпилировать sample.rb (лихой файл):

$ ruby sample.rb
sample.rb:12:in '<main>': uninitialized constant SCHEDULER (NameError)

При попытке запустить лихой сервер:

$ dashing start
/home/yadayada/.rvm/gems/ruby-2.2.0/gems/backports-3.6.4/lib/backports/std_lib.rb:9:in 'require': cannot load such file -- nokogiri (LoadError)
from /home/yadayada/.rvm/gems/ruby-2.2.0/gems/backports-3.6.4/lib/backports/std_lib.rb:9:in 'require_with_backports'
from /home/yadayada/Desktop/dashing/project/jobs/ActiveBuilds.rb:2:in '<top (required)>'
(...)

Я также мог бы опубликовать компоненты HTML/CSS/CoffeScript виджета Number, но я считаю, что проблема заключается в sample.rb, а виджет Number полностью установлен по умолчанию.

В случае, если код не был достаточно понятен, я пытаюсь получить страницу localhost, подсчитать количество элементов "p" (позже это будут активные сборки, когда я переключусь на jenkins, не переключиться еще, потому что я имею дело с сертификатами), а затем отправить его на sample.rb, который будет получать данные и обновлять их каждые 2 секунды на дисплее панели управления.

Любые предложения приветствуются! Заранее спасибо!

1 ответ

Решение

Нашел решение:

удалить / переустановить nokogiri gem (без sudo) поместить мой сканер в папку lib и потребовать его внутри заданий на самом задании, поместить все в функцию SCHEDULER, например так:

# This job provides the data of the amount of active builds on Jenkins using the Number widget

# Updates every 2 seconds
SCHEDULER.every '2s' do

  # Invokes the crawlers from the lib folder
  Dir[File.dirname(__FILE__) + '/lib/*rb'].each { |file| require file }
  
  # Create the ActiveBuilds reference
  builds = ActiveBuilds.new
  
  # Attributes the amount of active builds to the current valuation
  current_valuation = builds.get_amount_of_active_builds
  
  # Pass the current valuation to the last to present the change percentage on the dashboard
  last_valuation = current_valuation

  # Sends the values to the Number widget (widget id is valuation)
  send_event('valuation', { current: current_valuation, last: last_valuation })
end

Другие вопросы по тегам