1

クライアント向けの 3.0 Rails プロジェクトに取り組んでおり、稼働中の本番サーバーから実行する必要がある機密性の高い移行があります。基本的に、DB、FL -> fl、PA -> pa などのすべての州の略語を小文字にすることを想定しています...制限のためにローカルでテストできません: 移行の文言を呼び出すことは何かに影響しますか? 追加や作成などで行うことは知っていますが、このような情報をいつ更新するかはわかりません。

rails g migration UpdateStateAbbreviation

def self.up       
  say_with_time "Updating states abbreviation..." do
  State.find(:all).each do |s|
    tmp = s.abbreviation.downcase
    s.update_attribute :abbreviation, tmp
  end
end end

Rake db:migrate
4

1 に答える 1

2

移行に関する非常に重要なルールの 1 つは、移行でモデルを参照しないことです。これは学術的な懸念のように思えるかもしれませんが、将来のある時点でStateモデルがまったくなくなる可能性があり、削除するとapp/models/state.rb、この移行は機能しなくなります。

適切に構成された移行は、将来の変更に関係なく適切に実行されます。それが何をしたとしても、後で取り消される可能性がありますが、それは何も悪いことではありませんが、失敗するように設定することは決して良い考えではありません.

文字列関数などを使用して、データベースでこの小文字化操作を実行できます。

execute "UPDATE states SET abbreviation=LOWER(abbreviation)"

移行でモデルを使用すると、あらゆる種類の問題が発生します。これは、モデルを使用して特定のキー レコードを事前入力する場合にも当てはまります。seeds.rb必要な場合、またはそれを行う必要がある場合に使用rakeします。

注意として、ローカルでテストできない場合は、開発プロセスに非常に欠陥があります。移行が正しく機能することを確認するために、必要に応じてアップとダウンの両方で、常に移行を実行してテストする必要があります。セキュリティやプライバシーの理由で実際の本番データを取得できない場合は、DBA と協力して、テスト目的でスクラブされた機密性の低いバージョンを取得してください。たとえば、州名は秘密であってはなりません。

于 2012-08-22T17:46:50.260 に答える