Este é o código do bash que deve ser executado. Então, primeiro ele substitui o usuário pelo projeto aberto e depois 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 chnaging o script acima para isso:
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 a cada passo solicita a senha. Como o script traduzido pode ser aprimorado para que funcione?
ATUALIZAÇÃO 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 é boa até a linha que afirma isso no código. A partir daí, recebo 4 erros
sudo: bundle: comando não encontrado
ATUALIZAÇÃO 2:
Depois de tentar a sugestão de Dmitry Vasilyanov, descobri que, se eu inserir o -i, ele simulará o login do usuário. No entanto, essa não é a maneira final de fazê-lo.
Se eu executar echo $PATH
após efetuar login como projeto aberto, a saída será/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games:/home/openproject/.rvm/bin
Se eu correr echo $PATH
depois que su openproject -c "bash -l"
a saída for/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
sudo
nãosu
.cd
, já que é um shell embutido.sudo
é usado para executar como outro usuário, sendoroot
o padrão se nada for especificado, você pode executar perfeitamentesudo -u openproject bundle install
.bundle: command not found
erro porque você definirPATH
ouGEM_PATH
em sua.bash_profile
ou.bashrc
, eles não são executados em conchas não-login / não-interativo, então você precisa para passar-i
parasudo
a de login simular, como este:sudo -iu openproject bundle install
Respostas:
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.
fonte
sudo
no início, caso contrário, ele me pedia minha senha.sudo
também vai pedir a senha na primeira vez que você executá-lo, daí a aconselhar de colocar suas coisas em um shell script e executar o que quer comsu
ousudo
Se você usa o bash, pode fazer aqui-doc
Dessa forma, você pode executar muitos comandos e manter o estado dentro de um script.
O mesmo com o sudo
fonte