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
cd
, já que é um shell embutido.
sudo
é usado para executar como outro usuário, sendo root
o padrão se nada for especificado, você pode executar perfeitamente sudo -u openproject bundle install
.
bundle: command not found
erro porque você definir PATH
ou GEM_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
para sudo
a de login simular, como este:sudo -iu openproject bundle install
sudo
nãosu
.