Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 为什么';我的ActionMailer生产设置不能延迟作业?_Ruby On Rails_Ruby_Ruby On Rails Plugins - Fatal编程技术网

Ruby on rails 为什么';我的ActionMailer生产设置不能延迟作业?

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

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

我延迟了在我的开发环境中发送消息的作业,但当我部署到生产服务器并尝试发送消息时,消息被拒绝,我的延迟作业表中显示错误:
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设置为默认设置,电子邮件发送时没有错误。但现在我得到了副本(