我正在使用apartment
gem来实现多租户。
除了我的电子邮件中的网址,一切正常。因此,对于从任何请求和后台作业发送的每封电子邮件,都使用default_url_options
作为主机。
有关如何处理电子邮件中的主机切换的任何建议吗?
答案 0 :(得分:4)
猴子补丁的另一个想法:
# config/initializers/action_dispatch_routing_subdomain_extension.rb
require 'action_dispatch_routing_subdomain_extension'
初始化器:
# config/environments/production.rb
Rails.application.configure do
# ...
config.action_mailer.default_url_options = {
host: 'example.com',
protocol: 'https',
subdomain: lambda { Apartment::Tenant.current }
}
end
然后,您可以在子域定义中使用lambda:
# get active source.
sphere1 = GetActiveSource()
# get animation track
sphere1StartThetaTrack = GetAnimationTrack('StartTheta', index=0, proxy=sphere1)
# create keyframes for this animation track
# create a key frame
keyFrame1 = CompositeKeyFrame()
# create a key frame
keyFrame2 = CompositeKeyFrame()
keyFrame2.KeyTime = 1.0
keyFrame2.KeyValues = [360.0]
# initialize the animation track
sphere1StartThetaTrack.KeyFrames = [keyFrame1, keyFrame2]
# get animation scene
animationScene = GetAnimationScene()
animationScene.Play()
答案 1 :(得分:1)
您可以通过一个小的猴子补丁实现这一点,以允许您使用lambda设置default_url_options。将其添加到lib/dynamic_url_options
并将其包含在您的环境配置中:
module ActionDispatch::Routing
class RouteSet
alias_method :original_url_for, :url_for
def url_for(options, route_name = nil, url_strategy = UNKNOWN)
dynamic_options = Rails.application.config.respond_to?(:dynamic_url_options) ? Rails.application.config.dynamic_url_options.call : {}
options = options.merge(default_url_options).merge(dynamic_options)
original_url_for options, route_name, url_strategy
end
end
end
然后,您可以在环境配置中执行以下操作:
config.action_mailer.default_url_options = {
host: 'yourdomain.com'
}
config.dynamic_url_options = lambda {{
subdomain: Apartment::Tenant.current
}}