Ruby: регистр выражений - PullRequest
       0

Ruby: регистр выражений

0 голосов
/ 29 января 2012

Я использую Gmail для отправки электронных писем из моего приложения. Предвидя очень низкий трафик, но, возможно, более чем достаточно, чтобы я мог превысить ограничения почты gmail, поэтому я настраиваю его (в моем контроллере приложений) для использования двух разных учетных записей в зависимости от времени суток.

Я использовал этот набор раньше успешно, но теперь, когда я ввел символы «больше» или «меньше», я получаю сообщение об ошибке «когда». В другом приложении я сделал

when Time.now == 1
    ....

when Time.now == 2
    ...etc 

и все работало нормально.

Может кто-нибудь сказать мне, что с этим не так?

  case

when Time.now.hour > 12


ActionMailer::Base.smtp_settings = {
  :user_name => "blahblahblah@gmail.com", 
  :password => ENV['GMAIL_PASS'], 
  :address => "smtp.gmail.com",
  :port => 587,
  :tls => true
}


when Time.now.hour < 12

ActionMailer::Base.smtp_settings = {
  :user_name => "blahblah@gmail.com", 
  :password => ENV['GMAIL_PASS'], 
  :address => "smtp.gmail.com",
  :port => 587,
  :tls => true
}


end

Ответы [ 3 ]

2 голосов
/ 29 января 2012

Зачем использовать регистр только с двумя вариантами?Очень простой и более элегантный способ выполнить то, что вы хотите сделать:

username = ["email1@gmail.com", "email2@gmail.com"].sample

Тогда вы получите случайное распределение, которое со временем будет 50/50.Я думаю, что использование Gmail в целом, хотя для массовой рассылки, это плохо.Любой достойный хост может предоставить вам SMTP-сервер.

1 голос
/ 29 января 2012

Я не могу ответить, почему происходит ошибка.Я протестировал его и, как сказал @summea, похоже, что он работает без else (хотя использование else лучше - ваш пример ничего не даст, когда Time.now.hour == 12)

Однако я думаю, что разделение учетных записейна часах это плохая идея.Я сомневаюсь, что использование будет равномерно распространяться;потому что разные части мира будут спать в разное время.Таким образом, вы можете обнаружить, что 80% писем отправляются через одну учетную запись.

Если вы разделите на секунды, вы получите более равномерное распределение.

Чтобы упростить последующую модификацию, вы также можете захотетьустановить переменную для user_name и избегать повторения других настроек сервера:

  case
    when Time.now.sec > 29
      user_name = "blahblahblah@gmail.com"
    else
      user_name = "blahblah@gmail.com"
  end

  ActionMailer::Base.smtp_settings = {
    :user_name => user_name, 
    :password => ENV['GMAIL_PASS'], 
    :address => "smtp.gmail.com",
    :port => 587,
    :tls => true
  }
0 голосов
/ 29 января 2012

Второе «когда» должно быть «еще»

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...