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

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

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

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

Q&A

解決済

1回答

1609閲覧

バッチ処理で、has_many関係のあるモデルのレコードを追加、編集したい

ronstail

総合スコア26

Ruby on Rails

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

0グッド

2クリップ

投稿2014/10/13 09:16

お世話になります。
以下のような関連を持つモデルに対し、Jenkins等のCIツールを用いてバッチ処理を起動し、
レコードの追加、更新をしたいと考えています。

lang

1class Albam < ActiveRecord::Base 2 has_many :songs 3end 4 5class Song < ActiveRecord::Base 6 belongs_to :albam 7end

・Aのアルバムの曲Bを追加する
・Cのアルバムの曲Dを削除する

などの入力データを用いて、アソシエーション関係を保ったまま一括でバッチ処理をしたいのですが、
SQLで直接データを更新する場合は、アソシエーションの関係を保持するのが大変そうな気がしています。
このような場合、どういった方法で実装するのがよいでしょうか。

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

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

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

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

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

guest

回答1

0

ベストアンサー

  1. Railsが稼働しているアプリケーションサーバ
  2. DBサーバ
  3. CI(バッチ)サーバ

がそれぞれ別ホストで稼働している、ということですよね。

SQLで直接データを更新する場合はリソースを節約できますが、SQLだと変更に弱いしなんといっても、ActiveRecordのデータバリデーションが効かないのであぶないと思います。

なので、バッチサーバでもRailsプロセスを動かすのがいいと思います。

bundle exec rails runner "Batch.run"

jenkinsでこのようなjobを実行するイメージです。

投稿2014/10/14 12:34

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

ronstail

2014/10/15 09:46

ご回答ありがとうございます。 確かに、バリデーションが効かないのは問題ですね。 SQLでやるのはやめておくことにします。 バッチサーバでRailsプロセスを動かすというのは、①アプリケーションサーバのバッチファイルをバッチサーバから叩きにいくということでしょうか。それとも、②バッチサーバ内のバッチファイルを起動するということでしょうか。 追加の質問となり、大変恐縮ですが、 ①の場合、CIサーバからアプリケーションサーバ内にあるバッチを起動する方法 ②の場合、バッチサーバ内にあるバッチファイル内で、アプリケーションサーバに設定がある、ActiveRecordのデータバリデーションを効かせる方法をご教授いただけないでしょうか。
hello-world

2014/10/16 09:30

①の場合、バッチサーバーからSSHでアプリケーションサーバーに入り、コマンドを実行するのが一般的だと思います。 ②の場合、バッチサーバーにもアプリケーションサーバーと同様のコード(あるいは設定)をあらかじめ配置しておくのが一般的だと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問