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 $PATH
despué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 $PATH
despué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.
sudo
se usa para ejecutarse como otro usuario, siendo root
el predeterminado si no se especifica nada, puede ejecutarlo perfectamente sudo -u openproject bundle install
.
bundle: command not found
error porque se establece PATH
o GEM_PATH
en su .bash_profile
o .bashrc
, que no se ejecutan en los depósitos sin conectar / no interactivo, por lo que necesita para pasar -i
a sudo
al inicio de sesión simular, por ejemplo:sudo -iu openproject bundle install
sudo
, nosu
.