web-dev-qa-db-ja.com

Pumaを使用するときにBigDecimal制限を初期化する正しい場所はどこですか

私はRails Big Decimalに制限を設定する初期化子を持っています

BigDecimal.limit(20)

これが実行され、制限が適切に設定されているようです。

しかし、Webリクエストが来たとき(私はPumaを使用しています)、リクエストを処理するスレッドに制限が設定されていないようです。制限はデフォルトの0に設定されています。

他に制限を設定する必要がある場所はありますか?

再現したい場合:

新しいRailsアプリを作成し、制限を設定するイニシャライザを追加します

BigDecimal.limit(20)
puts "*** Set #{BigDecimal.limit}"

あなたのアプリケーションコントローラに追加

before_action :check_big_decimal

def check_big_decimal
  puts "***request #{BigDecimal.limit}"
end

サーバーを起動し、ページを更新してリクエストを行います

20に設定されているはずですが、リクエストが入ってくると0に戻ります。

5
RMK

ハックでお勧めできない方法は、サルにクラスにパッチを当てることです。これを初期化子に追加できます

class BigDecimal
  def self.limit(val = 25)
    25
  end
end

問題は、本当にどこでも25に制限したいですか?はいの場合は、これをラストリゾートとして試すことができます。その値をハードコーディングすることの副作用についてはわかりません(そしてそのメソッドをオーバーライドすることはまったくできません)。

0
mr_sudaca