相关疑难解决方法(0)

在所有rails帮助程序中将协议更改为https

Rails 3.1+我希望我的url帮助程序使用https协议,而不必在我调用的每个帮助程序中指定它.搜索后我发现了各种各样的方法但没有工作,例如:

 ROUTES_PROTOCOL = (ENV["RAILS_ENV"] =~ /development/ ? 'http://' : 'https://')

scope :protocol => ROUTES_PROTOCOL, :path => "/app" do
Run Code Online (Sandbox Code Playgroud)

如何才能做到这一点?

https routes ruby-on-rails helpers ruby-on-rails-3

12
推荐指数
4
解决办法
1万
查看次数

Sidekiq + Devise Mailer有多个子域名

我在我的一个项目中在运行时更改ActionMailer :: Base.default_url_options = {:host => host}时遇到问题.

设置:我有多个子域,它们在后端使用相同的Rails-Application.我想通过Sidekiq队列将我的Devise邮件发送给用户.设计邮件(确认,重置密码)包含链接,这些链接需要特定的子域才是正确的.

我的环境

rails (4.2.0)
sidekiq (3.3.1)
devise (3.4.1)
devise-async (0.9.0)
Run Code Online (Sandbox Code Playgroud)

我的application_controller中有一个before_action

class ApplicationController < ActionController::Base

  before_action :set_action_mailer_default_url_options

  private

  def set_action_mailer_default_url_options
    host = "my-logic-to-get-the-correct-host"
    ActionMailer::Base.default_url_options = {:host => host}
  end

end
Run Code Online (Sandbox Code Playgroud)

现在,如果我想重置密码,我总是会得到我在环境文件中指定的默认网址选项.如果我从我的环境中删除default_url_options,我会在sidekiq日志中获得默认的Devise错误.

ActionView::Template::Error: Missing host to link to! Please provide the :host parameter, set default_url_options[:host], or set :only_path to true
Run Code Online (Sandbox Code Playgroud)

主机始终在控制器中正确设置.我已经调试过了.似乎主机没有传递给sidekiq ..任何想法如何解决这个问题?

我无法在某个地方保存子域名,因为用户可以触发来自不同子域的电子邮件,但并不总是相同.我需要一种方法告诉Devise应该使用哪个主机发送特定的电子邮件.我可以覆盖Devise邮件程序并传递主机或类似的东西吗?

在我的情况下,以下解决方案是不可能的: 使用sidekiq时Rails动作邮件程序中的动态域名

顺便说一句:完整的工作流程,包括设计,设计 - 异步和sidekiq本身(在开发,分期和生产中).只有链接的主机不正确 - >这是我的大问题:-) ..

devise sidekiq ruby-on-rails-4 devise-async

5
推荐指数
1
解决办法
828
查看次数

Rails:使 PORO 可以使用 Route Helper 方法

在我的 rails 应用程序中的普通旧 Ruby 对象 (PORO) 中:我有以下方法:

def some_method
  content_tag(:li, link_to("Do something", somewhere_path(object.id)))
end
Run Code Online (Sandbox Code Playgroud)

首先:对象不理解该方法content_tag,所以我添加了以下内容,使对象理解该方法:

include ActionView::Helpers::TagHelper
Run Code Online (Sandbox Code Playgroud)

然后对象不理解,link_to所以我添加了以下内容,使对象理解该方法:

include ActionView::Helpers::UrlHelper
Run Code Online (Sandbox Code Playgroud)

现在,它不理解我的路线:somewhere_path(object.id)

问题:如何让 Rails 应用程序中的 PORO 理解生成路线的助手?

后续问题:是否有更简单的方法将所有这些功能包含到我的 PORO 对象中?也许有一种方法可以只使用include一个主要模块并获得所有这些功能(而不是可能需要 3 个不同的模块)。

ruby ruby-on-rails

1
推荐指数
1
解决办法
1742
查看次数