質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.49%
Ruby on Rails 5

Ruby on Rails 5は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Q&A

解決済

1回答

1142閲覧

Rails5でバッチ処理の編集をしたら編集前の挙動まで引き継いで実行されてしまう

kozica

総合スコア58

Ruby on Rails 5

Ruby on Rails 5は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

0グッド

0クリップ

投稿2018/09/20 08:07

編集2018/09/20 08:22

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!"と一緒に実行されていました。

なぜ、消したはずのモデルメソッドまで実行されてしまうのでしょう

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

単純なミスでした。

config/initializersの直下ファイルに同じコードを書いていて、それが実行されておりました。

initializers直下ファイルはRails起動時にのみ動くものだと思っていて、バッチ処理の際にも毎回実行されているとは思わなかったので、これはこれで勉強になりました。

投稿2018/09/20 08:53

kozica

総合スコア58

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.49%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問