1
execute <<-SQL
  commit
  reindex database ActiveRecord::Base.configurations[Rails.env]['database'] 
SQL

明らかにそれは機能しませんが、アイデアはわかります。上記のコード構造が何と呼ばれているのか、調べてみてもわかりません。

Postgres ではトランザクション内での db reindex が許可されていないため、Rails 4 までトランザクションを無効にする方法がないように見えるため、上記のハックが機能することを願っています。

UPDATE

したがって、上記は機能しませんでしたが、このハックは機能しました:

# force a reindex after we switched all those columns to citext
execute "commit;"
execute "reindex database #{ActiveRecord::Base.configurations[Rails.env]['database']} force;"
4

1 に答える 1

1

<<-SQL...SQL部分は、関数の引数である複数行の文字列を作成しますexecute。通常の文字列と同様に、その文字列にルビ式を含めることができ"value #{myObject.value}"ます。これにより、次のようになります。

execute <<-SQL
  commit
  reindex database #{ActiveRecord::Base.configurations[Rails.env]['database']}
SQL

その SQL ハックが機能するかどうかはわかりません。しかし、実行中のトランザクションを閉じているように見えますが、後で再び閉じられます (最初にトランザクションを開始したコードによって)。さらに、その取引には理由があるかもしれません。つまり、レールが後でトランザクションをロールバックしようとすると、トランザクションは既にコミットされているため、失敗します (または少なくとも機能しません)。

于 2013-05-01T20:33:24.523 に答える