Ruby on rails 为什么';我的ActionMailer生产设置不能延迟作业?
我正在开发Ruby(1.8.6)on Rails(2.3.5)应用程序,目前正在使用Gmail发送电子邮件。我想切换到发送带有延迟作业的消息 我延迟了在我的开发环境中发送消息的作业,但当我部署到生产服务器并尝试发送消息时,消息被拒绝,我的延迟作业表中显示错误:Ruby on rails 为什么';我的ActionMailer生产设置不能延迟作业?,ruby-on-rails,ruby,ruby-on-rails-plugins,Ruby On Rails,Ruby,Ruby On Rails Plugins,我正在开发Ruby(1.8.6)on Rails(2.3.5)应用程序,目前正在使用Gmail发送电子邮件。我想切换到发送带有延迟作业的消息 我延迟了在我的开发环境中发送消息的作业,但当我部署到生产服务器并尝试发送消息时,消息被拒绝,我的延迟作业表中显示错误:530 5.7.0必须首先发出STARTTLS命令。i25sm12946175anh.17。我以前见过这个错误(当我的配置中没有启用TLS时)。但在我开始使用延迟工作之前,它是有效的。这是我的邮件配置: ActionMailer::Base
530 5.7.0必须首先发出STARTTLS命令。i25sm12946175anh.17。
我以前见过这个错误(当我的配置中没有启用TLS时)。但在我开始使用延迟工作之前,它是有效的。这是我的邮件配置:
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。通常您会使用
:在编写时启用\u starttls\u auto
,但这仅适用于Ruby>=1.8.7和Ruby>=1.9
因此,您需要使用所述的解决方案:定义一个文件smtp_tls.rb
,将其放置在initializers文件夹中
但是,我如何利用延迟的工作呢
我的REE安装?我该怎么说呢
东西都用什么版本的Ruby
script/delayed_job
命令使用系统Ruby。所以“哪个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
然后哪个rake
应该指向您的REE安装。如果不是,则可以通过以下方式使用REE:
RAILS_ENV=production /opt/ruby-enterprise-1.8.7-2010.01/bin/rake jobs:work -t
是的,我就是这么想的。我只是不明白如果我不使用延迟工作发送它为什么会起作用。你是在运行延迟工作人员吗?是的,我是。我将Ruby EE设置为默认设置,电子邮件发送时没有错误。但现在我得到了副本(