如何使用公寓宝石

时间:2015-11-23 14:18:25

标签: ruby-on-rails apartment-gem

我正在使用apartment gem来实现多租户。

除了我的电子邮件中的网址,一切正常。因此,对于从任何请求和后台作业发送的每封电子邮件,都使用default_url_options作为主机。

有关如何处理电子邮件中的主机切换的任何建议吗?

2 个答案:

答案 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
}}