为什么延迟作业不能与我的ActionMailer生产设置一起使用?

时间:2010-08-30 17:29:04

标签: ruby-on-rails ruby ruby-on-rails-plugins

我正在开发一个关于Rails(2.3.5)应用程序的Ruby(1.8.6),我目前正在使用Gmail来发送电子邮件。我想切换到发送延迟作业的消息。

我延迟了在我的开发环境中发送消息的作业,但是当我部署到我的生产服务器并尝试消息被拒绝时,我的delayed_jobs表中出现错误:530 5.7.0 Must issue a STARTTLS command first. i25sm12946175anh.17.我之前看到过这个错误(当我的配置中没有启用TLS时)。但是在我开始使用delayed_jobs之前它正在工作。这是我的邮件配置:

ActionMailer::Base.smtp_settings = {
  :enable_starttls_auto => true,
  :address => 'smtp.gmail.com',
  :port => 587,
  :domain => 'example.com',
  :authentication => :plain,
  :user_name => 'user@example.com',
  :password => 'password'
}

非常感谢您对此问题的任何帮助。

更新:应用程序实际上在REE ruby​​ 1.8.7上运行。因此,延迟作业可能会以某种方式使用服务器上安装的常规ruby解释器(1.8.6)。但是,如何使用我的REE安装延迟作业?我怎么知道什么东西在使用什么版本的Ruby。

2 个答案:

答案 0 :(得分:0)

通常你会在编写时使用:enable_starttls_auto,但这只适用于ruby> = 1.8.7和ruby> = 1.9。

因此,您需要按照规定here使用解决方案:定义放置在初始化文件夹文件夹中的文件smtp_tls.rb

答案 1 :(得分:0)

  

但是,如何使用延迟作业   我的REE安装?我该怎么说呢   事情正在使用什么版本的Ruby。

script/delayed_job命令使用系统Ruby。因此“which ruby”应指向REE安装。如果没有,您可以使用Ruby可执行文件强制它。可以说,您的REE安装在/opt/ruby-enterprise-1.8.7-2010.01。然后:

$ RAILS_ENV=production /opt/ruby-enterprise-1.8.7-2010.01/bin/ruby script/delayed_job -n 2 start

或者如果您使用rake命令启动,例如:

$ rake jobs:work -t RAILS_ENV=production

然后which rake应指向您的REE安装。如果不是,那么你可以通过以下方式使用REE:

RAILS_ENV=production /opt/ruby-enterprise-1.8.7-2010.01/bin/rake jobs:work -t