Bundlerを使用してセットアップされたRailsプロジェクトがあります。バンドルされているgemの1つは、Railsアプリで使用したいRackミドルウェアを提供します(ただし、「本番」のRails環境でのみ使用します)。
このようなものをconfig/environments/production.rb
に入れると、不明な定数エラーが発生します。
config.middleware.use ::Rack::MyMiddleware
...おそらくBundler.require
、この時点ではまだ呼び出されておらず、バンドルされている宝石がどれも利用できないためです。
私はこれを回避するいくつかの方法を見つけましたが、どれも素晴らしいとは思えません。私が見逃しているより標準的な解決策があるかどうか疑問に思っています。
- 明示的
require 'my_middleware_gem'
にconfig/environments/production.rb
config.middleware.use
呼び出しをブロックにラップしafter_initialize
、定数を参照する前にBundlerがその処理を実行できるようにします。"::Rack::MyMiddleware"
ベアクラス定数の代わりに文字列( )を使用します。これは何らかの理由でUnicornで機能しないようですが、他のいくつかのサーバーでは機能します(Unicornを使用すると、呼び出しを試行することになります"::Rack::MyMiddleware".new
が、もちろん失敗します)。
私はいくつかのより良いアプローチを逃していますか?初期化プロセスのどの時点で、バンドルされたgemが利用可能になると予想されますか?