2014-04-27 1 views
0

Я пытаюсь получить Rails 4.1 для получения отсканированных писем, но было очень сложно даже дойти до этой точки. Я могу запустить команду ниже в консоли SSH, когда вы вошли в систему под учетной записью root, но когда я поместил ее в файл/etc/valiases, я получаю откат от скрипта, говорящего, что «следующие адреса не удались».Pipe to program не работает, но работает нормально в консоли SSH

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

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

Я также попытался избежать двойных кавычек безрезультатно.

Мне нужно запустить как useraccount, поскольку переменные среды RVM не существуют для root. Запуск 1-й команды в консоли SSH при входе в систему с правами администратора, но не при получении exim электронной почтой.

ответ

0

Есть несколько вещей, которые я должен был сделать, чтобы обойти эту проблему:

1) Переместить сценарий второго места в свой собственный файл в качестве Todd suggested; вложенные кавычки приводили к тому, что сценарий не запускался.

2) Сделать исполняемый файл; разрешения уже были установлены на 755.

3) Хотя exim использовал мое имя пользователя для выполнения сценария, переменные среды, такие как PATH и HOME, не были установлены вообще! Это вызвало ошибку ruby. Это вызвало много других проблем, поскольку большая часть приложения зависит от RVM и его гемзет. Поэтому я не мог заставить рубин работать, а тем более рельсы. Даже если бы я был явно назван рубиновой оболочкой, spring сломался бы, потому что $HOME не был установлен. Просто каскад проблем, потому что пользовательская среда не была установлена. Я также не мог просто выдать su - username -c 'whatever', потому что учетная запись, которая использовала exim, не имела права использовать su.


Так работает установка выглядит следующим образом:

/etc/valiases/dev.mydomain.com

[email protected]: "|/bin/bash -l -c '/home/useraccount/rails_deployments/dev.www/current/script/receive_eblast_bounce'" 
*: ":fail: No Such User Here" 

/дома/UserAccount/rails_deployments/Dev.WWW/ток/скрипт/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.

+0

Мне пришло в голову, что часть причины, по которой это делалось вам, заключается в том, что exim не выполняет оболочку, такую ​​как bash, чтобы запускать приложения. Он запускает приложение напрямую, поэтому вам нужно указать файлы окружения, которые bash сделал бы для вас как часть процесса запуска. –

0

Вы не можете удвоить внутри двойных кодов, не выполняя некоторые экранизации. Как только вы начнете убегать от кавычек, он может получить сложное знание, когда вам также нужно избегать других символов. Ваш пример не кажется слишком сложным, но я предлагаю другой метод.

IMHO вы должны создать сценарий оболочки, например eblast-bounce-script, с помощью команд, которые вы хотите запустить. Затем установите псевдоним:

[email protected]: "|/path/to/eblast-bounce-script" 

Убедитесь, что сделать скрипт исполняемым и работоспособным со стороны пользователя, что Exim будет вызывать его как. Если вы создаете режим сценария 755, принадлежащий root, этого должно быть достаточно.

+0

[email protected]: "| runuser -l useraccount -c 'cd /home/useraccount/rails_deployments/dev.www/current && script/receive_eblast_bounce' << << Это не удалось. Это не дает мне веской причины, он просто сказал, что «следующие адреса (ы) не удалось:« и показывает мне содержимое сырого сообщения. – JakeTheSnake

+0

Я также попытался переместить весь этот скрипт в файл receive_eblast_bounce и просто использовать ссылку на файл в файле valiases, как вы упомянули, но я получаю тот же результат. FWIW файл receive_eblast_bounce является исполняемым. – JakeTheSnake

+0

Я думаю, что это как-то связано с командой runuser. В SSH я пытаюсь запустить run_eblast_bounce при входе в систему как useraccount, но я получаю runuser: не могу установить группы: операция не разрешена. Я уверен, что это то, что получает программа для пользователя программы. Но как бы я загрузил свою пользовательскую среду в противном случае? – JakeTheSnake

Смежные вопросы