मेरे पास रैक मिडलवेयर का एक टुकड़ा है जो सबडोमेन के माध्यम से किरायेदार लोड करता है, और कुछ डिफ़ॉल्ट सेटिंग्स लागू करता है। मिडलवेयर, सुंदर नहीं होने पर, क्या यह पर्याप्त काम ठीक है। हालांकि, जब ऐप के भीतर एक अपवाद फेंक दिया जाता है तो मिडलवेयर "स्ट्रिप्स" पूर्ण स्टैक ट्रेस होता है। जब मैं जाल कहता हूं तो मेरा मतलब है कि यह अपेक्षित स्टैक ट्रेस छुपाता है।रैक मिडलवेयर "फँसाने" स्टैक ट्रेस
यहां एक उदाहरण है।
मैं बहुत की तरह एक एक नियंत्रक कार्रवाई में एक अपवाद फेंक कर रहा हूँ:
def index
throw "Exception in a Rails controller action"
@taxonomies = Spree::Taxonomy.all
end
आपको लगता है कि स्टैक ट्रेस इस स्थान का संदर्भ होगा उम्मीद करेंगे लेकिन ऐसा नहीं है। इसके बजाय यह मिडलवेयर में एक रेखा का संदर्भ देता है।
Completed 500 Internal Server Error in 139ms
UncaughtThrowError (uncaught throw "Exception in a Rails controller action"):
lib/tenant_manager/middleware/loader.rb:42:in `call'
ऐसा क्यों होता है? क्या आपने पहले ऐसा कुछ देखा है?
# lib/tenant_manager/middleware/loader.rb
module TenantManager
module Middleware
class Loader
# Middleware to detect an tenant via subdomain early in
# the request process
#
# Usage:
# # config/application.rb
# config.middleware.use TenantManager::Middleware::Loader
#
# A scaled down version of https://github.com/radar/houser
def initialize(app)
@app = app
end
def call(env)
domain_parts = env['HTTP_HOST'].split('.')
if domain_parts.length > 2
subdomain = domain_parts.first
tenant = Leafer::Tenant.find_by_database(subdomain)
if tenant
ENV['CURRENT_TENANT_ID'] = tenant.id.to_s
ENV['RAILS_CACHE_ID'] = tenant.database
Spree::Image.change_paths tenant.database
Apartment::Tenant.process(tenant.database) do
country = Spree::Country.find_by_name('United States')
Spree.config do |config|
config.default_country_id = country.id if country.present?
config.track_inventory_levels = false
end
Spree::Auth::Config.set(:registration_step => false)
end
end
else
ENV['CURRENT_TENANT_ID'] = nil
ENV['RAILS_CACHE_ID'] = ""
end
@app.call(env)
end
end
end
end
मैं गहरे लाल रंग का 2.2.0p0
और rails 4.1.8
चला रहा हूँ:
यहाँ मिडलवेयर है।
मैंने इसके लिए जाल खोजे हैं लेकिन कुछ भी नहीं मिला, शायद इसलिए कि मैं सही चीज़ के लिए सर्च नहीं कर रहा हूं।
यह क्यों हो रहा है और मैं क्या गलत कर रहा हूं पर कोई विचार?
चीयर्स!