Tôi có một phần Phần mềm trung gian giá để tải người thuê, qua tên miền phụ và áp dụng một số cài đặt mặc định. Phần mềm trung gian, trong khi không đẹp, công việc của nó có đủ tốt không. Tuy nhiên, khi một ngoại lệ được ném vào trong ứng dụng, phần mềm trung gian "bẫy" toàn bộ dấu vết ngăn xếp. Khi tôi nói bẫy tôi có nghĩa là nó ẩn dấu vết ngăn xếp dự kiến.Giá đỡ trung gian "bẫy" ngăn xếp dấu vết
Đây là một ví dụ.
Tôi ném một ngoại lệ trong một hành động một bộ điều khiển như vậy:
def index
throw "Exception in a Rails controller action"
@taxonomies = Spree::Taxonomy.all
end
Bạn mong chờ rằng stack trace sẽ tham khảo vị trí này nhưng nó không. Thay vào đó nó tham chiếu một dòng trong phần mềm trung gian.
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'
Tại sao điều này xảy ra? Bạn đã từng thấy điều gì như thế này chưa?
Đây là 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
Tôi đang chạy ruby 2.2.0p0
và rails 4.1.8
.
Tôi đã tìm kiếm trên web về điều này nhưng không thể tìm thấy bất kỳ điều gì, có thể vì tôi không cố gắng làm đúng.
Bất kỳ suy nghĩ nào về lý do điều này xảy ra và những gì tôi đang làm sai?
Chúc mừng!