Rails5にてバッチ処理を実装しようとしているところで疑問点にぶつかりました。
下記のようにコードを書いています。
$bundle exec whenever --update-crontab
上記を実行し、バッチ処理を開始して順調に動きました。
ruby
1#config/schedule.rb 2rails_env = ENV['RAILS_ENV'] || :development 3set :output, 'log/crontab.log' 4set :environment, rails_env 5 6every 1.minute do 7 runner "Tasks::PersonalLogArrange.execute" 8end 9 10 11# webex/lib/tasks/personal_log_arrange.rb 12require 'webex/app/models/personal_log' 13class Tasks::PersonalLogArrange 14 def self.execute 15 PersonalLog.new.arrange 16 end 17end 18 19#app/models/personal_log.rb 20 def arrange 21 array = Array.new 22 personal_log = PersonalLog.all 23 personal_log.find_each do |x| 24 hash = Hash.new 25 begin 26 test = JSON.parse(x.decrypted_data) 27 rescue => error 28 test = JSON.parse(x.data) 29 end 30 if test.keys.include?("uid") 31 test["uid"] = "#{test["uid"]}(#{x.provider})" 32 end 33 hash[x.macaddr] = test 34 array.push(hash) 35 end 36 $new_data = array.each_with_object(Hash.new{|h,k|h[k] = Hash.new}){|it,memo| 37 it.each{|mac,val| 38 memo[mac].merge!(val){|_,s,o| s + ',' + o} 39 } 40 } 41 $new_data.transform_values!{|val| val.transform_values{|v| v.to_s.split(',').uniq.join(',')}} 42 puts $new_data 43 end
しかし、ここで別のコードも書いてみてみようと思い下記の部分だけコードを書き換えました。
ruby
1# webex/lib/tasks/personal_log_arrange.rb 2require 'webex/app/models/personal_log' 3class Tasks::PersonalLogArrange 4 def self.execute 5 puts "hello!" 6 end 7end
すると、消したはずの
PersonalLog.new.arrange
もputs "hello!"と一緒に実行されていました。
なぜ、消したはずのモデルメソッドまで実行されてしまうのでしょう
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。