Направляющие ActionMailer - отправитель формата и имя/адрес электронной почты получателя

add_definitions существует в CMake с тех пор, как самая первая сборка CMake была запущена более десяти лет назад.

COMPILE_DEFINITIONS - это просто более новый, более гибкий и детальный способ сделать это.

Они всегда будут рядом: поскольку более 99% существующих в мире файлов CMakeLists используют add_definitions, было бы неразумно удалять его. Разработчики CMake очень стараются поддерживать обратную совместимость ... иногда в ущерб ясности и простоте. И иногда делать по существу одно и то же разными способами.

Итак: add_definitions прежде всего полезен для настройки уже существующих файлов CMakeLists - для тех проектов, которые существовали до появления COMPILE_DEFINITIONS. И, поскольку эти проекты используют его, любые новые проекты, основанные на том, что люди узнают из чтения этих файлов CMakeLists, также вполне могут использовать add_definitions.

Но если одного использования COMPILE_DEFINITIONS достаточно для ваших нужд, в этом нет ничего плохого.

109
задан Grnbeagle 19 July 2014 в 08:47
поделиться

3 ответа

Иногда процесс снижения скорости обучения с течением времени называется «отжигом» скорости обучения.

Существует много возможных «графиков отжига», например, когда скорость обучения является линейной функцией времени:

u(t) = c / t

... где c некоторая константа. Или есть расписание «поиск-затем-схождение»:

u(t) = A * (1 + (c/A)*(t/T)) / 
           (1 + (c/A)*(t/T) + T*(t^2)/(T^2))

... которое поддерживает скорость обучения около A , когда t мало по сравнению с T ] (фаза «поиска»), а затем снижает скорость обучения, когда t велико по сравнению с T (фаза «схождения»). Конечно, для обоих этих подходов вам необходимо настроить параметры (например, c , A или T ), но мы надеемся, что их внедрение поможет больше, чем поможет причинить боль. :

97
ответ дан 24 November 2019 в 03:17
поделиться

в рельсах 2.3.3 была введена ошибка в ActionMailer. Билет можно посмотреть здесь Билет № 2340 . Он разрешен в 2-3-стабильном и мастер-классах, поэтому будет исправлен в 3.x и 2.3.6.

Для исправления проблемы в 2.3.* можно использовать код, предоставленный в комментариях к билету:

module ActionMailer
  class Base
    def perform_delivery_smtp(mail)
      destinations = mail.destinations
      mail.ready_to_send
      sender = (mail['return-path'] && mail['return-path'].spec) || Array(mail.from).first

      smtp = Net::SMTP.new(smtp_settings[:address], smtp_settings[:port])
      smtp.enable_starttls_auto if smtp_settings[:enable_starttls_auto] && smtp.respond_to?(:enable_starttls_auto)
      smtp.start(smtp_settings[:domain], smtp_settings[:user_name], smtp_settings[:password],
                 smtp_settings[:authentication]) do |smtp|
        smtp.sendmail(mail.encoded, sender, destinations)
      end
    end
  end
end
8
ответ дан 24 November 2019 в 03:17
поделиться

Еще один раздражающий аспект, по крайней мере в новом формате AR, - помнить, что 'default' вызывается на уровне класса. Ссылки на процедуры, которые предназначены только для экземпляров, приводят к тому, что при попытке их использования они тихо отказывают и выдают:

 NoMethodError: undefined method `new_post' for Notifier:Class

Вот что я в итоге использовал:

def self.named_email(name,email) "\"#{name}\" <#{email}>" end
default :from => named_email(user.name, user.email)
1
ответ дан 24 November 2019 в 03:17
поделиться
Другие вопросы по тегам:

Похожие вопросы: