0

我正在尝试让 Rails 4.1 接收退回电子邮件,但要做到这一点真的很困难。当我以 root 身份登录时,我可以在 SSH 控制台中运行以下命令,但是当我将它放入我的 /etc/valiases 文件时,我从脚本中得到一个反弹,说“以下地址失败”。

runuser -l useraccount -c "cd /home/useraccount/rails_deployments/dev.www/current/bin && rails runner -e development 'EBlast.receive(STDIN.read)'"

/etc/valiases/dev.mydomain.com

eblast-bounce@dev.mydomain.com: "|runuser -l useraccount -c "cd /home/useraccount/rails_deployments/dev.www/current/bin && rails runner -e development 'EBlast.receive(STDIN.read)'""

我也尝试转义双引号无济于事。

我需要以用户帐户身份运行,因为 root 不存在 RVM 环境变量。以 root 身份登录时在 SSH 控制台中运行第一个命令可以工作,但当 exim 收到电子邮件时则不行。

4

2 回答 2

0

你不能在双引号内加上双引号而不做一些转义。一旦开始转义引号,知道何时还需要转义其他字符会变得很复杂。您的示例似乎并不太复杂,但我建议使用不同的方法。

恕我直言,您应该使用要运行的管道命令创建一个 shell 脚本,例如eblast-bounce-script 。然后将您的别名设置为:

eblast-bounce@dev.mydomain.com: "|/path/to/eblast-bounce-script"

确保使脚本可执行,并且可由 exim 将调用它的用户运行。如果您将脚本模式设置为 755,由 root 拥有,那就足够了。

于 2014-04-28T12:36:35.013 回答
0

为了解决这个问题,我必须做一些事情:

1)按照托德的建议,将运行脚本移动到自己的文件中;嵌套引号导致脚本无法运行。

2)使文件可执行;权限已设置为 755。

3)即使exim使用我的用户名执行脚本,PATH和HOME等环境变量根本没有设置!这导致ruby了一个未知的命令。这导致了许多其他问题,因为大多数应用程序都依赖于 RVM 及其 gemsets。所以我不能让红宝石运行,更不用说轨道了。即使我要显式调用 ruby​​ 包装器,也会因为未设置spring而中断。$HOME只是一连串的问题,因为没有设置用户环境。我也不能仅仅su - username -c 'whatever'因为 exim 使用的帐户没有权限使用而发出su


所以工作设置如下所示:

/etc/valiases/dev.mydomain.com

eblast-bounce@dev.mydomain.com: "|/bin/bash -l -c '/home/useraccount/rails_deployments/dev.www/current/script/receive_eblast_bounce'"
*: ":fail: No Such User Here"

/home/useraccount/rails_deployments/dev.www/current/script/receive_eblast_bounce

D=`pwd`

HOME=/home/useraccount

if [ -f /etc/bashrc ]; then
    . /etc/bashrc
fi

if [[ -s "/home/useraccount/.rvm/scripts/rvm" ]] ; then
  source "/home/useraccount/.rvm/scripts/rvm"
fi

cd /home/useraccount/rails_deployments/dev.www/current
./bin/rails runner -e development 'EBlast.receive(STDIN.read)'

cd $D

我现在在 ActionMailer 不应该使用 SSL 时遇到问题,我不知道这是否与我在这里所做的事情有关,但至少它执行 rails 脚本。

于 2014-04-28T20:00:50.167 回答