是否可以使用数据库中的值动态设置production.rb
中的一些配置变量?
我正在构建一个多租户应用,每个租户都有一些需要动态设置的特定于环境的信息。
例如:
// production.rb
config.action_mailer.default_url_options = { :host => current_tenant.domain }
current_tenant
是ApplicationHelper
中定义的辅助方法,因此无法在production.rb
以下是current_tenant
:
// application_helper.rb
def current_tenant
@current_tenant ||= Tenant.find_by(domain: Apartment::Tenant.current)
end
如果没有,是否可以使用DB数据动态创建secrets.yml
?从那以后,我可以在ENV
production.rb
答案 0 :(得分:0)
也许你可以试试这个: 为您的电子邮件创建帮助方法:
def build_tenant_url(route_name, *args)
opts = args.extract_options!
opts.merge!(host: @tenant ? @tenant.domain : your_domain)
#Here you can merge other options if you need to pass a token etc
Rails.application.routes_url_helpers.send(:"#{route_name}_url", *args, opts)
end
在邮件程序中,定义@tenant
然后在您的电子邮件视图中使用
= link_to 'Edit', build_tenant_url(:edit_tenant, @tenant)
答案 1 :(得分:0)
此应用程序在应用程序启动时运行,因此如果您希望某个选项由某个变量驱动,则该变量将需要可用于启动时运行的Ruby代码。有各种方法可以做到这一点
例如,如果您在应用程序上为每个租户(用户组)提供了自己的子域,那么子域名可以用作启动代码的键,以读取数据库并为该租户提取一些详细信息。然后,当您将其旋转时,该子域将被传递到应用程序。
编辑 - 说完了所有这些,我不确定你是否有必要更改启动配置。您是否只是在发送电子邮件时查找相应的域名,而不是更改配置中的默认设置?