1

我必须每周向所有用户发送有关最新发生的事情的电子邮件。我正在使用 ActionMailer 来完成其他邮寄任务,但是我不知道如何自动化每周的电子邮件。

更新

我发现任何时候gem 都可以用来安排 cron 作业。我想这可以用来发送我打算发送的每周电子邮件。仍在寻找如何使其与 ActionMailer 一起工作,一旦我找到解决方案就会更新

更新 2

到目前为止,这就是我使用gem时所做的:-

在 schedule.rb 中

every 1.minute do
    runner "User.weekly_update", :environment => 'development'
end

在 users_mailer.rb 中

def weekly_mail(email)
    mail(:to => email, :subject => "Weekly email from footyaddicts")
end

在 users.rb 中

def self.weekly_update
    @user = User.all
    @user.each do |u|
      UsersMailer.weekly_mail(u.email).deliver
    end
end

如果我尝试从控制台运行 User.weekly_update 我能够收到邮件。我正在开发模式下测试并使用 rvm。我检查了我的 crontab 文件,它有正确的东西。

但是我没有从应用程序自动收到任何邮件。任何线索可能是什么问题?

谢谢,

4

2 回答 2

2

好的,结果证明是任何时候gem的路径问题,并且当我安装另一个版本的ruby时产生了问题。

在我的机器上,新的 ruby​​ 版本安装在 /usr/local/bin/ruby 中。在我的 Rails 应用程序中,我必须转到文件 script/rails 并将 #!/usr/bin/env ruby​​ 替换为 #!/usr/local/bin/ruby。

我通过访问显示此错误消息的 cron.log 文件发现了这一点:- /usr/bin/env: ruby​​: No such file or directory

我制作了一个 cron.log 文件来记录 cron 错误,这是我在问题中编写的 schedule.rb 代码中所做的:-

every 2.minutes do
    runner "User.weekly_update", :environment => 'development', :output => 'log/cron.log' 
end 

我现在收到定期邮件。

于 2011-12-08T20:45:54.063 回答
0

看来您还没有配置 ActionMailer 设置。首先从控制台检查日志,邮件过程是否正常(粘贴您的日志)。如果是,请执行以下步骤。

将此添加到您的 gemfile 中。

gem 'tlsmail'

bundle install

在 config/environments/development.rb 文件中写入这些配置设置

  require 'tlsmail'
  Net::SMTP.enable_tls(OpenSSL::SSL::VERIFY_NONE)
  ActionMailer::Base.delivery_method = :smtp
  ActionMailer::Base.perform_deliveries = true
  ActionMailer::Base.raise_delivery_errors = true
  ActionMailer::Base.smtp_settings = {
      :address => "smtp.gmail.com",
      :port => "587",
      :domain => "gmail.com",
      :enable_starttls_auto => true,
      :authentication => :login,
      :user_name => "<address>@gmail.com",
      :password => "<password>"
  }

config.action_mailer.raise_delivery_errors = true

根据用户名和密码添加您的工作密码/电子邮件。不要忘记重新启动服务器。

于 2011-12-07T10:27:23.603 回答