• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:Ruby 指定時間事にループ処理のコードが不安です)

Ruby 指定時間事にループ処理のコードが不安です

notnotの回答

  • ベストアンサー
  • notnot
  • ベストアンサー率47% (4848/10262)
回答No.2

>処理後に初期化するなり前回のデーターに上書きしていくような方法はありませんでしょうか? 何を?? 文脈から見て、「60秒毎の処理に近づける方法は無いか?」という質問だとして回答します。 まず考えつくのは、sleepを1秒にして、現在時刻を調べ、秒が0であれば実行するという方法。 until Time.now.sec==0 sleep 1 end 微妙なタイミングで0秒の所をスキップしてしまう可能性があるため、もうちょっと工夫が必要。 あとは、Rubyの中で繰り返すのはやめて、1回限りの処理にして、OSの機能で1分毎に起動してもらう。

chibi10sai
質問者

お礼

ruby側での処理はスキルを上げる為に御指摘頂いた点を重点に煮詰めていこうと思います。 現時点での対応としてサーバー側にてクローンを実施してみようと思います。 この度はご丁寧に最後まで対応していただいてありがとうございます。

関連するQ&A

  • Rubyで実行結果を時間差をつけて一行ずつ表示?

    10000を 10でわっていくプログラムです。これを普通に実行すると、一度に実行結果が、表示されますが、秒数を設定して、一行ずつ間隔をあけて、表示するには、どのようにプログラムを書けばよいでしょうか? よろしくお願いましす。  ソースコード n=10000 while n>=1 do break if n <= 1 if n%2 == 0 n = n / 10 end puts n end 実行結果 1000 100 10 0 ↑ この実行結果を  1000  1秒後に 100  1秒後に 10 1秒後に 0 のように 時間差をつけたいです。

    • ベストアンサー
    • Ruby
  • Ruby初学者です。

    Ruby初学者です。 スクレイピングをしています。 Capybara + PhantomJSを用いているのですが(動的要素も取得したいため)、 session.visit "sample.com" variable = session.find_all(:xpath,"//a[contains(text(), "なんとか")]") puts variable といったコードを書くと #<Capybara::Result:0x0325d6honyaefccf0f8> という風な表示がされてしまいます。 上記の例に限らず、xpathで抽出したものをputs等を用いて表示しようとすると、上述のようにわけのわからん表示が出てきて困ります。 Nokogiriだとputsを使うとDOM?html?がそのまま文字通り表示されてくれるのですが。。 Capybaraだと何らかの変換を行うような処理がされてしまっているのですかね。(というかputsでコードを表示するような目的のものではない?) 解決方法(抽出したコードをputsでそのまま表示する方法)があれば教えてください。

  • Ruby について質問です

    Rubyについて質問です class Document include Enumerable attr_accessor :title, :author, :content def initialize(title, author, content) @title = title @author = author @content = content end def words @content.split end def each words.each { |word| yield(word) } end end doc = Document.new('Advice', 'Harry', 'Go ahead make my day') doc.each { |word| puts word } このようなコードがすでに出来上がったおり、 これをアルファベットの早い順に並び変えて(sort)出力させるには どのようにコードを追加すればよいですか? どうやら、sort メソッドと <=> 演算子を使って記述するようですが、 よくわかりません 回答お願いいたします。

  • Rubyにおける、XPathの関数「text()="x"」への変数の使

    Rubyにおける、XPathの関数「text()="x"」への変数の使用方法 お世話になります。 RubyにてXPathの関数「text()="x"」"x"の部分に変数を使用したいと思い、コードを作成しています。 text() 関数のところで困っています。 例えば <?xml version="1.0" encoding="UTF-16"?> <NameRoot> <Text> <Name>あああああ</Name> <No>001</No> </Text> <Text> <Name>いいいいい</Name> <No>002</No> </Text> <Text> <Name>ううううう</Name> <No>003</No> </Text> </NameRoot> の内容のファイルを読み込み、その中から該当するNoに相当するNameを取得しようと しています。 で、書いたのが下記のような内容なのですが、gettestクラスのgetNameメソッドにて コメントアウトしてある行であれば、決め打ちでNo="001"の物を取ってこれるのですが、 ここに引数として渡されたローカル変数の、idを使用しようとするとnode変数にNilClass が返ってきて取得できません。 文字列リテラルを色々調べてみたのですが、どうも上手く行かず困っています。 他愛も無い質問かもしれませんが、大変困っています。 どなたか知恵をお貸しくださいますようお願い致します。 class gettest def getName(id) #↓これがきちんと動きません node = REXML::XPath.first(@masterdata, '//NameRoot/Text/No[text()="#{id}")]') #↓こちらは当然ながら動きます # node = REXML::XPath.first(@masterdata, '//NameRoot/Text/No[text()="001"]') path = (node.xpath + "/../Name") @name = @masterdata.elements[path].text() end end class main def edit @mastername = "" @mastername = @master.getName("001") print @mastername end end

    • ベストアンサー
    • Ruby
  • Ruby Selenium リンクの取得方法

    こんばんは。 Ruby初心者ですが、現在、Selenium Webdriver、chromeにはまり、スクレイピングのような事をしています。 そんな中で困っている事があるのですが、 とあるサイトの画像URLを取得、テキストに追記で書き出ししようと色々と調べたのですが全く分からず困っています。 <div class="hoge"> <img src="http://hoge" alt=""> </div> htmlはこんなようでxpathは/hoge/imgと仮定します。 open("hoge.txt", "a"){|f| output = driver.find_element(:xpath, '/hoge/img') f.puts "#{output.text}" } のように書いてみたもののテキストに改行しか出力されない状態です。 何卒どうかご教授、よろしくお願いします。

    • ベストアンサー
    • Ruby
  • なぜRuby1.9が日本語処理できない問題

    次の簡単なRubyプログラム(test.rb)ですが、 #!/usr/bin/env ruby # -*- coding: utf-8 -*- while gets $_.chomp! tmp = $_.split(/ /) s0 = tmp[0] s1 = tmp[1] s2 = tmp[2] puts "line #{s0}\t#{s1}\t#{s2}" end 入力テキストファイル(hello.txt)は次の2行です。 1 hello, everybody! 2 皆さん、 こんにちは。 test.rb hello.txt を実行すると、Ruby 1.8.7 は問題なく正常ですが。Ruby 1.9.3は次のエラーになりました。 line 1 hello, everybody! k1.rb:7:in `split': invalid byte sequence in US-ASCII (ArgumentError) from k1.rb:7:in `<main>' 何故でしょうか。詳しい方に教えて頂けるでしょうか。 どうぞ宜しくお願いします。

    • ベストアンサー
    • Ruby
  • DOMDocumentの文字化けに悩まされています

    cURLを使った場合のエンコードに悩まされています。 $http = new SimplecURL($url); /*cURLを使って指定ページのhtmlを取得する自己関数*/ $html = $http->execute(); $html = mb_convert_encoding($html, "UTF-8", "auto"); この後、取得したHTMLを、 $doc = new DOMDocument(); @$doc->loadHTML($html); $xpath = new DOMXPath($doc); //body部から該当するUrlを抽出 $extracts = $xpath->query($xPath); foreach ($extracts as $value) { $results = trim($value->nodeValue); $results[] = $result; } のようにして取得しているのですが、日本語が文字化けする場合が非常に多いです。 $html = mb_convert_encoding($html, "UTF-8", "auto"); とか、 $result = mb_convert_encoding($result, 'UTF-8', 'auto'); とかするのですがダメです。 色々なサイトでそうなのですが、例えばShift-JISで書かれていると思われる http://www.nhk.or.jp/worldwave/abc/popup/abc120528.html などでも日本語を //div[@class=\"paragraph clearfix\"]//p[@class=\"ja\"]/text() のようなxPathで取得すると文字化けして出てきます。 mb_convert_encoding($html, "UTF-8", "Shift-JIS")のようにしてもダメです。 どのようにすれば解決するのでしょうか? アドバイスを頂けないでしょうか?

    • ベストアンサー
    • PHP
  • 【ruby】クラスCGIを改造して、クエリの文字コードを変えたい

    クエリパラメータを取得するのにCGIクラスを使っています。 Rubyのマニュアルでは『フォームフィールドの値を得る』として以下の様に記載してあります。 require "cgi" cgi = CGI.new values = cgi['field_name'] # <== 'field_name' の配列 私が使用しているサーバはWindowsサーバでして、取得したクエリ(フォームフィールド)は文字コードをs-jisに変換して使う事が大半です。 そこで、CGIクラスそのものを改造して、いちいちvalues.tosjisしなくてもよい様にしたいです。 実は以前に、同じような事を質問してまして(http://oshiete1.goo.ne.jp/qa4944090.html)alias を使えばこのようなことが出来るかなと思い、以下の様に書いてみました。(行頭は全角スペースです。) #!/usr/local/bin/ruby require 'cgi' require 'kconv' STDOUT.binmode STDIN.binmode class CGI  alias :initialize_orig :initialize  def initialize()   hash=initialize_orig()   hash.each do|key,val|    hash[key]=val.collect{|x|x.tosjis}   end   hash  end end cgi=CGI.new if cgi.has_key?('arg') then  STDERR.puts cgi['arg']  cgi.out(){'ok'} end 結果は `initialize': undefined method `each' for nil: NilClass (NoMethodError) で実行不可でした。 initializeはリターンできないからかな。 次に、 class CGI  alias :params_orig :params  def params()   hash=params_orig   hash.each do|key,val|    hash[key]=val.collect{|x|'*' + x + '*'}   end  hash end end などとも書いてみましたが、 undefined method `params' for class `CGI' で実行不可でした。 ご指導のほど、よろしくお願いいたします。

    • ベストアンサー
    • Ruby
  • 初歩でめんどくさい質問

    すみません。rubyを学習したての者です。 以下のコードで構文エラーがでます。3つです。 どこが悪いのかまったくわかりません。 ------------------------------------------------------ puts 'じゃんけんゲーム開始' sleep 1 #プレイヤーのじゃんけん入力 puts '何を出しますか?' puts '1グー' puts '2チョキ' puts '3パー' input_value = gets #じゃんけんロボの処理 robo = rand(3) + 1 case robo when 1 puts 'ロボはグーを出した!' when 2 puts 'ロボはチョキを出した!' when 3 puts 'ロボはパーを出した!' end #じゃんけん結果判定 player = input_value.to_i case player when 1 puts 'あなたはグーを出した' case robo when 1 #ロボがグーなら puts '引き分けです' when 2 #ロボがチョキなら puts 'あなたの勝ちです' when 3 #ロボがパーなら puts 'あなたの負けです' end when 2 puts 'あなたはチョキを出した' case robo when 1 puts '引き分けです' when 2 puts 'あなたの勝ちです' when 3 puts 'あなたの負けです' end when 3 puts 'あなたはパーを出した' case robo when 1 puts 'あなたの勝ちです' when 2 puts 'あなたの負けです' when 3 puts '引き分けです' end   else #どの条件も成立しなかったとき puts 'あなたは何も出さなかった' puts 'あなたの負けです' end --------------------------------------------------- めんどくさいと思いますが、さらっと見て分かる方教えてください。

    • ベストアンサー
    • Ruby
  • 条件判断について教えて下さい。

    VB2008を使用している初心者です。 現在、RichTextBoxとCheckBoxとそれに対応したTextBoxを準備し、CheckBoxがTrueのTextBox.TextをRichTextBoxに代入するプログラムを作成しています。RichTextBoxにはCheckBoxをTrueにした分だけ複数のTextBox.Textを代入させています。ここまでのプログラムは下記コードで問題なく作動しています。 Button1を押す。 RichTextBox1.Clear() If Me.CheckBox1.Checked = True Then RichTextBox1.Text = TextBox1.Text End If If Me.CheckBox2.Checked = True Then If RichTextBox1.Text <> "" Then RichTextBox1.Text = RichTextBox1.Text & "・" End If RichTextBox1.Text = RichTextBox1.Text & TextBox2.Text End If ・ ・ ・ If Me.CheckBox20.Checked = True Then If RichTextBox1.Text <> "" Then RichTextBox1.Text = RichTextBox1.Text & "・" End If RichTextBox1.Text = RichTextBox1.Text & TextBox20.Text End If ここで問題なのですが、RichTextBox1への代入完了後、FalseにしたCheckBoxを再度True(代入時に選択したもののみ)にするコードをButton2に作成したいのですが上手くいきません。例えば下記のコードですと、RichTextBoxに1つだけTextBoxが入っている場合しかCheckBoxのTrueが戻りません。 If Me.CheckBox1.Checked = False Then If RichTextBox1.Text = TextBox1.Text Then Me.CheckBox1.Checked = True End If End If ・ ・ ・ If Me.CheckBox20.Checked = False Then If RichTextBox1.Text = TextBox20.Text Then Me.CheckBox2.Checked = True End If End If これはIf RichTextBox1.Text = TextBox1.Text Thenにしてしまっているためだと思いますが、これをどう修正したら良いかわかりません。もしお時間がある方みえましたらご教授お願いいたします。