views:

19

answers:

2

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 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 => '[email protected]',
  :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.

A: 

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.

nathanvda
yeah, thats what I thought. I just don't get why it works if I don't use delayed jobs to send it.
Sam
A: 

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
Swanand