7

每次有人访问该站点时,Rails 应用程序中的初始化程序都会运行吗?

例如,如果我的服务器于上午 10 点在德克萨斯州启动,并且有人在下午 1 点从纽约访问我的站点,而有人在晚上 10 点从洛杉矶访问,那么当来自纽约的人运行时,在 Rails 应用程序中执行初始化程序和洛杉矶访问,还是只有在我在德克萨斯州启动服务器后才运行初始化程序?

我问的原因是因为我在初始化文件中使用 case 表达式来更改电子邮件设置,具体取决于访问应用程序的时间。如果初始化程序在有人访问该站点时运行,这当然才有意义。如果它们仅在服务器启动时运行,那么这只是一种情况......

如果这不是执行此操作的正确位置,或者如果初始化程序仅在服务器在德克萨斯州启动后运行(例如),那么您会将这段代码放在哪里?

case
when Time.now.hour == 0
  ActionMailer::Base.smtp_settings = {
    :user_name => "blahblah@example.com",
    :password => "blahblah",
    :address => "smtp.examplel.com",
    :port => 25,
    :tls => true
  }
when Time.now.hour == 1
  ActionMailer::Base.smtp_settings = {
    :user_name => "blah@example.com",
    :password => "eatshit",
    :address => "smtp.example.com",
    :port => 25,
    :tls => true
  }
end
4

2 回答 2

13

一个非常简单直接的答案是:只有一次,当您的服务器启动时。

您可能对本文的 Rails 初始化过程感兴趣

于 2011-12-18T19:30:20.963 回答
7

每当您启动乘客/杂种或您正在使用的任何东西时,都会加载初始化程序。

要在运行时设置这些设置,请查看Rails:ActionMailer 的运行时配置?

于 2011-12-18T19:29:30.997 回答