开发者

Why doesn't Delayed Jobs work with my ActionMailer production setup?

开发者 https://www.devze.com 2023-01-13 13:28 出处:网络
I am working on a Ruby (1.8.6) on Rails (2.3.5) application in which I am currently using Gmail to deliver email messages. I want to switch to sending the messages with Delayed Jobs.

I am working on a Ruby (1.8.6) on Rails (2.3.5) application in which I am currently using Gmail to deliver email messages. I want to switch to sending the messages with Delayed Jobs.

I have delayed jobs sending messages on my development environment but when I deploy to my production server and try the messages get rejected and an error shows up in my delayed_jobs table: 530 5.7.0 Must issue a STARTTLS command first. i25sm12946175anh.17. I've seen this error before (when I don't开发者_JAVA技巧 have TLS enabled in my config). But it was working before I started using delayed_jobs. Here is my mail config:

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'
}

Any help with this issue is greatly appreciated.

Update: The application is actually running on REE ruby 1.8.7. So maybe delayed jobs is somehow using the regular ruby interpreter installed on the server (1.8.6). But, how do I get delayed jobs to use my REE install? And how do I tell what things are using what version of Ruby.


But, how do I get delayed jobs to use my REE install? And how do I tell what things are using what version of Ruby.

The script/delayed_job command uses the system Ruby. So "which ruby" should point to the REE installation. If not, you can force it by using the Ruby executable. Lets say, your REE is installed at /opt/ruby-enterprise-1.8.7-2010.01. Then:

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

Or if you use the rake command to start, like:

$ rake jobs:work -t RAILS_ENV=production

Then which rake should point to your REE installation. If its not, then you can make it use REE by:

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


Normally you would use :enable_starttls_auto as you wrote, but that only works for ruby >= 1.8.7 and ruby >= 1.9.

So you need to use the solution as stated here: define a file smtp_tls.rb which you place in your initializers folder.

0

精彩评论

暂无评论...
验证码 换一张
取 消