2011-06-10 11 views
6

Я не могу запустить команду ar_sendmail с моего терминала. Я не думаю, что упустил его конфигурацию. Ниже мой код;Команда ar_sendmail не работает с ruby ​​1.9.2

 
development.rb 
++++++++++++++++++++++++++++++++++++++++++++++++++++ 
ActionMailer::Base.delivery_method = :activerecord 
ActionMailer::Base.smtp_settings = { 
    :address => "smtp.gmail.com", 
    :port => 25, 
    :domain => "www.google.com", 
    :authentication => :plain, 
    :user_name => "[email protected]", 
    :password => "kathmandu", 
    :enable_starttls_auto => true 
} 
require "action_mailer/ar_mailer" 
Gemfile 
+++++++++++++++++++++++++++ 
gem "ar_mailer", "1.5.1"
My Mailer 
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 
class Postoffice < ActionMailer::ARMailer 
    def recover_password_email(account, name, address) 
    @recipients = address 
    @from = "[email protected]" 
    @subject = "Your Account at #{account.org_name} is Ready" 
    @body["subdomain"] = account.subdomain 
    @body["name"] = name 
    @body["org_name"] = account.org_name 
    @body["password"] = password 
    @body["email"] = address 
    end 
end 
My controller 
++++++++++++++++++++++++++++++++++++++++++++++++++++ 
def reset_password 
    @user = User.find_by_email(params[:email]) 

    begin 
     if @user 
     password = get_new_password 
     @user.update_attributes!(:password => password) 
     Postoffice.deliver_recover_password_email(@account, @user.individual.firstname, @user.email, password) 
     flash[:notice] = "Your password has been e-mailed to you. It should show up in a minute!" 
     redirect_to '/sessions/new'  
     end 
    rescue 
     flash[:notice] = "Sorry, there was a problem resetting your password." 
     redirect_to '/sessions/new' 
    end 
    end 
end 

Всякий раз, когда я бегу ar_sendmail команду я просто получить сообщение ниже. Если я ударил RAILS_ROOT в консоли, то я это показывает /Users/me/Dev/a5his

 
Usage: ar_sendmail [options] 

ar_sendmail scans the email table for new messages and sends them to the 
website's configured SMTP host. 

ar_sendmail must be run from a Rails application's root or have it specified 
with --chdir. 

If ar_sendmail is started with --pid-file, it will fail to start if the PID 
file already exists or the contents don't match it's PID. 

Sendmail options: 
    -b, --batch-size BATCH_SIZE  Maximum number of emails to send per delay 
            Default: Deliver all available emails 
     --delay DELAY    Delay between checks for new mail 
            in the database 
            Default: 60 
     --max-age MAX_AGE   Maxmimum age for an email. After this 
            it will be removed from the queue. 
            Set to 0 to disable queue cleanup. 
            Default: 604800 seconds 
    -o, --once      Only check for new mail and deliver once 
            Default: false 
    -p, --pid-file [PATH]   File to store the pid in. 
            Defaults to /var/run/ar_sendmail.pid 
            when no path is given 
    -d, --daemonize     Run as a daemon process 
            Default: false 
     --mailq      Display a list of emails waiting to be sent 

Setup Options: 
     --create-migration   Prints a migration to add an Email table 
            to stdout 
     --create-model    Prints a model for an Email ActiveRecord 
            object to stdout 

Generic Options: 
    -c, --chdir PATH     Use PATH for the application path 
            Default: . 
    -e, --environment RAILS_ENV  Set the RAILS_ENV constant 
            Default: 
    -t, --table-name TABLE_NAME  Name of table holding emails 
            Used for both sendmail and 
            migration creation 
            Default: Email 
    -v, --[no-]verbose    Be verbose 
            Default: 
    -h, --help      You're looking at it 


ar_sendmail must be run from a Rails application's root to deliver email. 

/Users/me/Dev/a5his does not appear to be a Rails application root. 

Заранее спасибо <> <

ответ

2

Как насчет использования отложенной работы? В прошлом я использовал ar mailer и нашел отложенную работу намного лучшим решением.

https://github.com/collectiveidea/delayed_job

+0

Спасибо, Кевин и отложенная работа - отличный камень. – a5his

0

Попробуйте ar_sendmail --chdir /Users/me/Dev/a5his или изменения в корень ваших рельсов приложения перед запуском команды

+0

Когда я ударил RAILS_ROOT в консоли, он показывает/Users/me/Dev/a5his. Разве это не означает, что я в корне моего приложения? – a5his

+0

Это не сработало, хотя !!! – a5his

1

Не уверен, что если это будет иметь значение, но это говорит о том, что here поставить

require "action_mailer/ar_mailer" 

в environment.rb, а не development.rb или production.rb. Кроме этого, я не вижу ничего, что вы пропустили.

+0

Я думаю, что неважно, поставим ли мы вышеуказанный код в development.rb вместо environment.rb. Спасибо за ответ. – a5his

0

ar_sendmail должен быть запущен из корня приложения Rails для доставки электронной почты. /Пользователи/me/Dev/a5his не являются корневыми приложениями Rails.

Вы используете команду в корне приложения?

+0

Да, без сомнения. a5his - это моя корневая папка. – a5his

0

попробовать

cd #{Rails.root.to_s} && bundle exec ar_sendmail_rails3 -e production 
0

Если вы посмотрите на исходный код (как показано ниже), отображается это сообщение, если загрузка конфигурации/среда выходит из строя. Один из примеров этого, с которым я столкнулся, заключался в том, что зависимость была неудовлетворенной, что вызывало пожар, когда загружалась конфигурация/среда. Чтобы решить эту проблему, вы можете использовать сеанс irb и попросить, чтобы config/environment отображала, какая ошибка может привести к сбою.

Dir.chdir options[:Chdir] do 
    begin 
    require 'config/environment' 
    rescue LoadError 
    usage opts, <<-EOF 
    #{name} must be run from a Rails application's root to deliver email. 
    #{Dir.pwd} does not appear to be a Rails application root. 
     EOF 
    end 
end