我正在尝试让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)'""
我也试过逃避双引号无济于事。
我需要以useraccount运行,因为root用户不存在RVM环境变量。以root用户身份登录时,在SSH控制台中运行第一个命令,但在exim收到电子邮件时则不行。
答案 0 :(得分:0)
如果不进行一些转义,你不能在双引号内双引号。一旦你开始转义引号,它就会变得复杂,知道你何时还需要转义其他字符。你的例子看起来并不太复杂,但我建议采用不同的方法。
恕我直言,您应该使用您想要运行的管道命令创建一个shell脚本,例如 eblast-bounce-script 。然后将别名设置为:
eblast-bounce@dev.mydomain.com: "|/path/to/eblast-bounce-script"
确保使脚本可执行,并由exim将其调用的用户运行。如果你使root拥有的脚本模式755就足够了。
答案 1 :(得分:0)
我必须做一些事情来解决这个问题:
1)将跑步者脚本移动到Todd suggested的自己的文件中;嵌套引号导致脚本无法运行。
2)使文件可执行;权限已设置为755。
3)尽管exim使用我的用户名来执行脚本,但是根本没有设置PATH和HOME等环境变量!这导致ruby
成为未知命令。这导致了许多其他问题,因为大多数应用程序依赖于RVM及其gemsets。所以我无法运行ruby,更不用说rails了。即使我要显式调用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
我现在遇到使用SSL的ActionMailer有问题,我不知道这是否与我在这里做的事情有关,但至少它执行了rails脚本。