if语句用于开发和生产环境

时间:2016-10-13 21:18:40

标签: ruby-on-rails ruby-on-rails-4

我正在使用Apartment Gem构建一个Rails 4应用程序,我仍然坚持如何继续定义我的邮件主机..这是一个教程系列的一部分,在几集之后才停止..

现在最大的问题是这一切都在开发模式下运行,但是当我推送到Heroku,创建一个帐户时,会发送确认电子邮件,但是当我去确认时,确认会将我重定向回我的localhost( lvh.me:3000)并且生产应用程序没有得到确认更新。

我的应用程序控制器中有以下内容:

  def set_mailer_host
    subdomain = current_account ? "#{current_account.subdomain}." : ""
    ActionMailer::Base.default_url_options[:host] = "#{subdomain}lvh.me:3000"
  end

我想添加一个if else语句,如下所示:

  def set_mailer_host
   if environment == development
    subdomain = current_account ? "#{current_account.subdomain}." : ""
    ActionMailer::Base.default_url_options[:host] = "#{subdomain}lvh.me:3000"
   else
    subdomain = current_account ? "#{current_account.subdomain}"
    ActionMailer::Base.default_url_options[:host] = "#{subdomain}patrolvault.co"
  end

我只是想弄明白,或者我是否应该采取另一种方法来解决这个问题?

2 个答案:

答案 0 :(得分:6)

您可以根据Rails环境放置条件:

Rails.env.production?

Rails.env.development?

Rails.env.test?

所以在你的代码中,

def set_mailer_host
   if Rails.env.development?
    subdomain = current_account ? "#{current_account.subdomain}." : ""
    ActionMailer::Base.default_url_options[:host] = "#{subdomain}lvh.me:3000"
   else
    subdomain = current_account ? "#{current_account.subdomain}"
    ActionMailer::Base.default_url_options[:host] = "#{subdomain}patrolvault.co"
   end
end

哦是的,看起来你在end区块中忘记了if-else

答案 1 :(得分:3)

您可以使用Ren的帖子中描述的Date x1 x2 x3 x4 7/31/16 1.03 0.98 1.01 1.03 8/31/16 1.01 0.95 1.03 1.01 9/30/16 0.97 1.02 0.94 0.98 10/31/16 0.99 0.98 1.01 1.04 方法,但每个环境的imho配置文件都是一个更好的地方。

查看官方指南的Configuring Rails Applications部分。您可以通过将相关代码放入Rails.env.production?文件,为每个环境使用不同的配置。例如,如果要在生产环境中为默认URL选项设置主机,可以将以下代码放在config/environments/[environment name].rb文件的末尾(就在最新的config/environments/production.rb语句之前):

end

请注意,此代码段包含另一种方法。您可以将域放入环境变量中,并在常规配置文件中使用相同的代码。这甚至更好,因为您将没有任何硬编码值和重复代码。