Este es el código bash que debe ejecutarse. Entonces, primero sustituye al usuario para abrir el proyecto y luego ejecuta todo el 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
He intentado cambiar el script anterior en esto:
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"
pero esto no funciona correctamente y en cada paso solicita la contraseña. ¿Cómo se puede mejorar el script traducido para que funcione?
ACTUALIZACIÓN 1:
Después de recibir sugerencias sobre esto, soy el punto donde el código ha sido modificado en:
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
La salida está bien hasta la línea que lo indica en el código. A partir de ahí me sale 4 error
sudo: paquete: comando no encontrado
ACTUALIZACIÓN 2:
Después de probar la sugerencia de Dmitry Vasilyanov, descubrí que si inserto el -i se simulará como inicio de sesión del usuario. Sin embargo, esta no es la forma final de hacerlo.
Si ejecuto echo $PATHdespués de iniciar sesión como proyecto abierto, la salida es/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games:/home/openproject/.rvm/bin
Si corro echo $PATHdespués de que su openproject -c "bash -l"la salida es/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, ya que es un shell incorporado.
sudose usa para ejecutarse como otro usuario, siendo rootel predeterminado si no se especifica nada, puede ejecutarlo perfectamente sudo -u openproject bundle install.
bundle: command not founderror porque se establece PATHo GEM_PATHen su .bash_profileo .bashrc, que no se ejecutan en los depósitos sin conectar / no interactivo, por lo que necesita para pasar -ia sudoal inicio de sesión simular, por ejemplo:sudo -iu openproject bundle install
sudo, nosu.