問題タブ [legacy-database]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
754 参照

grails - grails とレガシー データベース。主キーの一部としての外部キー

レガシーデータベースを使用するという問題に直面しました。リレーションで接続された 2 つのテーブルがあります。

テーブル サブスクライバーの連絡先:

テーブル SUBSCRIBERSCONTACTS には、複合主キー (SUBSCRIBERCODE、CONTACTTYPE、ORDER_ID) があります。また、SUBSCRIBERS (SUBSCRIBERCODE) への外部キー参照があります。SUBSCRIBERCODE は SUBSCRIBERSCONTACTS 主キーの一部です。

2 つの GORM ドメイン クラスを作成しました。

必要なものをすべて生成しました: grails generate-all *.

次に、新しい grails アプリケーションを実行しようとすると、例外が発生します。

Subscriberscontacts ドメイン クラスにsubscribercode属性を追加したくありません。追加すると、作成フォームにsubscribercode編集フィールドが表示されるからです。

0 投票する
1 に答える
146 参照

ruby-on-rails - Strategies for Rails development/test development with complex legacy schema

When developing a Rails app with a legacy schema that is in-use by an existing application, if tables have NOT NULL constraints on foreign id columns throughout the schema, in order to create/save models for tests, models need to exist for those associations, and their associations, etc. So, it isn't an easy as just creating one model at a time as you need it and testing with it.

As far as testing goes, this seems to be a problem if you are using FactoryGirl and want to create and save model instances to return from controllers, etc. when all of the association dependencies are involved. Another option is to mock, but mocking can be a little more time consuming and it doesn't allow you to do integration testing as easily. Another is to use fixtures, but those are time consuming and brittle. Another is to pre-populate the test database with production data, but that doesn't solve the need for factories, etc./known data to expect in tests, and Rails usually expects to start with a clean DB for the test environment.

What strategies for developing models, tests, etc. do you use when you have an existing complex schema that you are bolting a Rails app onto- not just for reading data, but also writing to the existing schema that is in use by an existing production application? (i.e. the "rebuild the ship while at sea" problem)

0 投票する
0 に答える
115 参照

ruby-on-rails - RoR レガシー データベース - 関連付けによりシステムがダウンする

レガシー データベースを持つ Ruby on Rails アプリに苦労しています。一般的には機能しますが、データベースで作成された関連付けを表示しようとしています。

関連する 2 つの足場は と と呼ばrepobuildます。

1 つ-ビルド テーブルにrepo has many builds外部キーがあります。repo_id

問題は次のとおりです。

  • repo/7ブラウザでの呼び出しは機能しています
  • 通話repo/7/builds/8も機能しています
  • しかし、私が電話をかけるとrepo/7/builds、システムがクラッシュします;)

さらに、次のように、Rails コンソールで問題なく実行できます。

--> ID 7 のリポジトリに属する​​すべてのビルドを返します

ここで何がうまくいかないのか誰にもわかりませんか?前もって感謝します!

0 投票する
3 に答える
383 参照

mysql - 従来のテキスト データベースを SQL に変換する

私のオフィスでは、すべてのデータを固定幅レコードのプレーンテキスト ファイル (拡張子 TXT) に格納する従来の会計システムを使用しています。各データ ファイルには、FILESALE.TXT などの名前が付けられます。私の目標は、このデータを MySQL サーバーに持ち込んで、レガシー ソフトウェアと連携できない他の多くのプログラムが読み取り専用で使用できるようにすることです。各ファイルは基本的に 1 つのテーブルです。

アクセスする必要があるファイルは合計で約 20 個あり、合計データは約 1 GB です。各行の幅は 350 ~ 400 文字で、列数は 30 ~ 40 です。データを取り込んだ後、1​​00MB をはるかに超える MySQL テーブルはありません。

従来の会計システムは、テキスト ファイル内の任意の行を変更し、古い行を削除し (削除されたレコード マーカー -- 0x7F を持っています)、新しい行をいつでも追加できます。

ここ数年、私は 5 分ごとに次のような cron ジョブを実行しています。

  1. 各データ ファイルの最終変更時刻を確認します。
  2. ファイルが変更されていない場合は、スキップしてください。さもないと:
  3. データ ファイルを解析し、問題をすべてクリーンアップし (非常に単純なチェックのみ)、必要な列のタブ区切りファイルを吐き出します (一部の列は無視します)。
  4. テーブルを TRUNCATE し、次のように新しいデータを MySQL サーバーにインポートします。

    /li>

cron スクリプトは、各ファイルのチェックと解析を並行して実行するため、更新プロセス全体にそれほど時間はかかりません。最大のテーブル (頻繁に変更されない) の更新には約 30 秒かかりますが、ほとんどのテーブルは 5 秒未満で済みます。

これは問題なく動作していますが、いくつかの問題があります。データベースのキャッシングに問題があると思うので、テーブルを TRUNCATE して LOAD するたびに、最初は MySQL データベースを使用する他のプログラムが遅くなります。さらに、更新を並行して実行するように切り替えたとき、データベースは数秒間、わずかに一貫性のない状態になる可能性があります。

このプロセス全体は恐ろしく非効率的です。この問題にアプローチするより良い方法はありますか? 調査する価値のある最適化や手順について何か考えはありますか? 同様の状況に直面した人からの巧妙なトリックはありますか?

ありがとう!

0 投票する
1 に答える
2241 参照

ruby-on-rails - Rails で LEGACY データベースを操作するにはどうすればよいですか?

私は、株式ミューチュアル ファンドと ETF のプロファイルを作成する Rails Web サイトに取り組んでいます。私はすでに、毎晩実行され、これらのミューチュアル ファンドと ETF に関するデータを Postgres データベースに入力する別の Ruby スクリプトを持っています。

Railsチュートリアルの第6章は、私が探しているものではありません。私がやろうとしていることと、Rails チュートリアルの第 6 章がしていることの違いは次のとおりです。 1. 私の Rails サイトでは、データベースを作成する必要はありません。したがって、「rails generate」や「​​rake db:migrate」を使用する必要はないと思います。(それとも間違っているのでしょうか?) 2. 私の Rails サイトはデータの読み取りのみを行い、データの追加、削除、または編集を行いません。

0 投票する
4 に答える
1581 参照

ruby-on-rails - ActiveRecord で "Mysql2::Error: Invalid date" を適切に処理するには?

Rails 3.2アプリをレガシーデータベースに構築していますが、これには別のテーブルにもいくつかの壊れたレコードがあります。最も頭を悩ます問題の 1 つは、無効な日付が含まれていることです。

コードを機能させるために一度手動で修正したサンドボックスをセットアップしました。いよいよ導入です。このため、サンドボックスは毎晩リセットされ、ライブ データベースからコピーされ、ferret インデックスが再構築され、移行が再適用されます。ライブ セットアップにデプロイする前に、最終的な修正を取得するためにサンドボックスに頻繁にデプロイします。

レガシーPHPアプリとこの新しいRailsアプリは、数週間から数か月間並行して実行する必要があるため、日付を1回だけ修正することはできません(更新:明確にするために、同じデータベースで同時に実行することを意味します時間)。おそらく移行またはレーキタスクを使用して、これを自動化する方法が必要です(私は後者を選びます)。

しかし、問題は、ActiveRecord がそのようなレコードをロードするときにチョークするため、Ruby コードでハードコーディングされた仮定によってレコードを調査して日付を修正する方法がないことです。

2 つ目の問題は、PHP コードがトランザクションを使用せず、一部のコード パスが壊れており、孤児や壊れたテーブル制約が残っているため、レガシー データベースに矛盾があることです。それらが発生したときに対処しますが、それらのほとんどはモデルで既に処理されています。最初の問題は日付です。

通常、これをどのように修正しますか?例外をインターセプトし、修正を試行するコードを実行することで、壊れたレコードを含むレガシー データベースの移行をサポートする魔法の宝石さえあるかもしれません...

移行パスでは、MySQL と 3 つの実稼働環境 (ライブ データベースを使用する安定、同じデータベースを使用するステージング、毎晩データベース クローンをリセットするサンドボックス) を使用します。完全なレガシー アプリケーションを 1 ステップで置き換えることはできないため、1 回限りのデータ マッピング/移行は行わないことにしました (約 50,000 の記事、数百のトピック、画像とダウンロードを含む巨大なファイル データベース、約 10 の Web サイトをサポートする CMS で構成されます)。 、約 12 年間のデータと作業、さまざまなプログラミング スキルによる乱雑な PHP コード、さまざまな移行段階からのコードの複製、パートナー サイトから RSS コンテンツを取得して、そこからの記事/投稿を独自のアプリケーションのトピックの記事タイムラインに混ぜ合わせます。もっと楽しいことたくさん…

最初のステップは、バックエンド アプリケーションを移行して、一貫した管理および発行インターフェイスを取得することです。従来のフロントエンド アプリケーションは、データベースに書き込む必要があります (訪問者が作成したコメントやその他のコンテンツ)。したがって、データベースを修正するプロセスは、定期的に無人で実行できる必要があります。

私たちは、begs_to と has_many で破損したモデルの依存関係を適切に処理するための修正を既に実施しています。Paperclip の統合は、発明されたすべての素晴らしいファイル名マッピングと連携するように設計されています。また、airbrake gem は、すべてのアプリケーションのクラッシュを Redmine インストールに報告するので、残っているすべての癖の概要をすばやく把握できます。

レガシー アプリケーションは、最新の MySQL バージョンで動作するように既に変更されており、現在の MySQL データベース サーバーに移行されています。

0 投票する
2 に答える
142 参照

ruby-on-rails - Rails 4 oracle 拡張アダプター多対多のピボット テーブルへのデータの伝播

まず最初に

使用:

  • レール4
  • Oracle 拡張アダプタ rails4 ブランチ

既存のデータベースにマッピングされた多対多の関係があります。私のモデルは次のようになります。

投票ページの静的ページ コントローラー

投票ビュー:

エントラント/フィールド部分:

フォームがイベント コントローラーに送信されるようになりましたPATCH

Entrantを に登録し、が常に存在するためEvent、中間モデルにのみデータを追加するにはどうすればよいですか?EventMapEvent

accepts_nested_attributes_forテーブル間で変更を伝播するためにモデルに含める必要がありますか (ドキュメントからこれが何をするのかよくわかりませんでした)? Entrantを更新するには、フォームから追加のパラメーターを送信する必要がありEventMapますか?

主な目標: 参加者が既存のイベントに登録できるフォームが欲しい!