Ich habe ein Stück Rack-Middleware, die einen Mandanten über Subdomain lädt und einige Standardeinstellungen anwendet. Die Middleware ist zwar nicht hübsch, aber es ist gut genug. Wenn jedoch eine Ausnahme in der App ausgelöst wird, "fängt" die Middleware den vollständigen Stack-Trace ab. Wenn ich Trap sage, bedeutet das, dass es die erwartete Stack-Spur versteckt.Rack-Middleware "Trapping" Stack-Trace
Hier ist ein Beispiel.
ich wie so eine Ausnahme in einer ein Controller-Aktion werfe:
def index
throw "Exception in a Rails controller action"
@taxonomies = Spree::Taxonomy.all
end
Sie würden erwarten, dass der Stack-Trace diese Position verweisen würde, aber es funktioniert nicht. Stattdessen referenzieren Sie eine Zeile in der Middleware.
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'
Warum passiert das? Hast du so etwas schon mal gesehen? Hier
ist die Middleware:
# 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
Ich bin mit Rubin 2.2.0p0
und rails 4.1.8
.
Ich habe die Webs nach diesem gesucht, konnte aber nichts finden, wahrscheinlich, weil ich nicht für das richtige Ding serching bin.
Irgendwelche Gedanken darüber, warum das passiert und was ich falsch mache?
Prost!