Por que você não cria um script de shell e faz um
su - openproject -c "your_shell_script"
Esteja ciente do - antes do projeto aberto. Isso definirá as variáveis de ambiente do openproject em vez das variáveis de ambiente do usuário.
Este é o código bash que deve ser executado. Então, primeiro ele substitui o usuário por openproject e então executa todo o código
su openproject -c "bash -l"
cd ~/openproject
git checkout Gemfile.lock
git pull
bundle install
RAILS_ENV="production" bundle exec rake db:migrate
RAILS_ENV="production" bundle exec rake db:seed
RAILS_ENV="production" bundle exec rake assets:precompile
Eu tentei incluir o script acima nisso:
su - openproject -c "cd ~openproject/openproject"
su - openproject -c "git checkout stable"
su - openproject -c "git checkout Gemfile.lock"
su - openproject -c "git pull"
su - openproject -c "bundle install"
su - openproject -c "RAILS_ENV="production" bundle exec rake db:migrate"
su - openproject -c "RAILS_ENV="production" bundle exec rake db:seed"
su - openproject -c "RAILS_ENV="production" bundle exec rake assets:precompile"
mas isso não funciona corretamente e em todas as etapas pede senha. Como o script traduzido pode ser melhorado para que funcione?
UPDATE 1:
Depois de receber sugestões sobre isso, sou o ponto em que o código foi modificado para:
cd ~openproject/openproject
sudo -u openproject git checkout stable
sudo -u openproject git checkout Gemfile.lock
sudo -u openproject git pull
# the output is good thill here
sudo -u openproject bundle install
sudo -u openproject RAILS_ENV="production" bundle exec rake db:migrate
sudo -u openproject RAILS_ENV="production" bundle exec rake db:seed
sudo -u openproject RAILS_ENV="production" bundle exec rake assets:precompile
A saída está ok até a linha que indica isso no código. De lá eu recebo 4 erros
sudo: bundle: command not found
UPDATE 2:
Depois de tentar a sugestão de Dmitry Vasilyanov, descobri que se eu inserir o -i, ele será simulado como login do usuário. No entanto, esta não é a maneira final de fazê-lo.
Se eu executar echo $PATH
após o login como openproject, a saída será /usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games:/home/openproject/.rvm/bin
Se eu executar echo $PATH
após su openproject -c "bash -l"
, a saída será /home/openproject/.rvm/gems/ruby-2.1.0/bin:/home/openproject/.rvm/gems/ruby-2.1.0@global/bin:/home/openproject/.rvm/rubies/ruby-2.1.0/bin:/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games:/home/openproject/.rvm/bin
Por que você não cria um script de shell e faz um
su - openproject -c "your_shell_script"
Esteja ciente do - antes do projeto aberto. Isso definirá as variáveis de ambiente do openproject em vez das variáveis de ambiente do usuário.
Se você usar bash você pode fazer aqui-doc
$ su - user -s/bin/bash -c <<EOF
export X=1
echo $X
EOF
Dessa forma, você pode executar vários comandos e manter o estado dentro de um script.
O mesmo com o sudo
sudo -u user bash <<EOF
your
script
here
EOF