Questo è il codice bash che dovrebbe essere eseguito. Quindi prima sostituisce l'utente a openproject e quindi esegue tutto il codice:
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
Ho provato a manipolare lo script sopra in questo:
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"
ma questo non funziona correttamente e ad ogni passaggio richiede la password. Come può essere migliorato lo script tradotto affinché funzioni?
AGGIORNAMENTO 1:
Dopo aver ricevuto suggerimenti su questo, sono il punto in cui il codice è stato modificato in:
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
L'output è ok fino alla riga che lo indica nel codice. Da lì ottengo 4 errori
sudo: bundle: comando non trovato
AGGIORNAMENTO 2:
Dopo aver provato il suggerimento di Dmitry Vasilyanov ho scoperto che se inserisco -i simulerà come login utente. Tuttavia, questo non è l'ultimo modo per farlo.
Se corro echo $PATH
dopo aver effettuato l'accesso come openproject, l'ouput è/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games:/home/openproject/.rvm/bin
Se corro echo $PATH
dopo su openproject -c "bash -l"
l'uscita è/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
, poiché è incorporato nella shell.
sudo
viene utilizzato per essere eseguito come un altro utente, essendo root
l'impostazione predefinita se non viene specificato nulla, è possibile eseguirlo perfettamente sudo -u openproject bundle install
.
bundle: command not found
errore perché si imposta PATH
o GEM_PATH
nel vostro .bash_profile
o .bashrc
, che non avviene in shell non-login / non interattivo, quindi è necessario passare -i
al sudo
di login simulare, in questo modo:sudo -iu openproject bundle install
sudo
nosu
.