postfix pipe mail to ruby script: 'require GEM_NAME' не загружает драгоценные камни - PullRequest
0 голосов
/ 12 июля 2020

Я пытаюсь настроить постфикс, который направляет полученную почту в сценарий ruby. Я создал одного пользователя deploy, который запускает файл сценария из postfix/master.cf. При получении почты postfix вызывает и выполняет сценарий ruby, но require 'resque' не загружает гем resque в этот сценарий. Вот журнал ошибок из /var/log/mail.log.

Jul 12 15:45:42 ubuntu-s-1vcpu-1gb-sfo2-01 postfix/pipe[3652]: 94ECE82A15: to=<deploy@mailet.in>, relay=myservice, delay=0.15, delays=0.05/0/0/0.1, dsn=5.3.0, status=bounced (Command died with status 1: 
"/var/www/mail_getter/email_receiver.rb". Command output: /home/deploy/.rvm/rubies/ruby-2.5.1/lib/ruby/site_ruby/2.5.0/rubygems/core_ext/kernel_require.rb:54:in
 `require':cannot load such file -- resque (LoadError)  from /home/deploy/.rvm/rubies/ruby-2.5.1/lib/ruby/site_ruby/2.5.0/rubygems/core_ext/kernel_require.rb:54:in `require' 
 from /var/www/mail_getter/email_receiver.rb:4:in `<main>' email receiver...... )

/etc/postfix/master.cf:

myservice       unix  -         n       n       -       2       pipe   flags=XhqFBR user=deploy:deploy argv=/var/www/mail_getter/email_receiver.rb

Вот /var/www/mail_getter/email_receiver.rb:

#!/home/deploy/.rvm/rubies/ruby-2.5.1/bin/ruby
puts 'email receiver......'
require 'rubygems'
require 'resque'
require 'redis'

class EmailReceive
  @queue = :incoming_email_queue

  def initialize(content)
    Resque.enqueue(EmailReceive, content)
  end
end
EmailReceive.new($stdin.read)

примечание: я тоже пробовал использовать #!/usr/bin/env ruby.

Вот /etc/postfix/aliases:

myservice:      deploy

Вот /etc/postfix/main.cf:

myhostname = mail.mailet.in
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
myorigin = /etc/mailname
mydomain = mailet.in
mydestination = $myhostname, $mydomain, ubuntu-s-1vcpu-1gb-sfo2-01, localhost.localdomain, localhost
relayhost = 
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = all
inet_protocols = all

header_checks = regexp:/etc/postfix/header_checks

Вот /etc/postfix/header_checks:

/To:.*@mailet.in.*/ FILTER myservice:

Вот результат rvm list:

 =* ruby-2.5.1 [ x86_64 ]
   ruby-2.7.0 [ x86_64 ]

# => - current
# =* - current && default
#  * - default

примечание: я также пробовал требовать драгоценные камни из абсолютного пути .

1 Ответ

0 голосов
/ 17 июля 2020

Я решил это, используя ruby из wrappers dir при вызове скрипта из постфикса.

Рабочая конфигурация для /etc/postfix/master.cf:

 myservice unix    -       n       n       -       2       pipe
  flags=XhqFBR user=deploy argv=/home/deploy/.rvm/wrappers/ruby-2.5.1/ruby /var/www/mail_getter/email_receiver.rb
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...