Il s'agit du code bash qui doit être exécuté. Donc, il remplace d'abord l'utilisateur par openproject et exécute ensuite tout le code:
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
J'ai essayé de chnaging le script ci-dessus dans ceci:
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"
mais cela ne fonctionne pas correctement et à chaque étape demande un mot de passe. Comment améliorer le script traduit pour qu'il fonctionne?
MISE À JOUR 1:
Après avoir reçu des suggestions à ce sujet, je suis au point où le code a été modifié 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 sortie est correcte jusqu'à la ligne qui l'indique dans le code. De là, j'obtiens 4 erreurs
sudo: bundle: commande introuvable
MISE À JOUR 2:
Après avoir essayé la suggestion de Dmitry Vasilyanov, j'ai constaté que si j'insère le -i, il simulera la connexion utilisateur. Cependant, ce n'est pas la dernière façon de le faire.
Si je cours echo $PATH
après m'être connecté en tant que projet ouvert, la sortie est/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games:/home/openproject/.rvm/bin
Si je cours echo $PATH
après su openproject -c "bash -l"
la sortie/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
, car il s'agit d'un shell intégré.
sudo
est utilisé pour s'exécuter en tant qu'autre utilisateur, étant root
la valeur par défaut si rien n'est spécifié, vous pouvez parfaitement l'exécuter sudo -u openproject bundle install
.
bundle: command not found
erreur parce que vous définissez PATH
ou GEM_PATH
dans votre .bash_profile
ou .bashrc
, ils ne sont pas exécutés dans des shells non connectés / non interactifs, vous devez donc passer -i
à sudo
pour simuler la connexion, comme ceci:sudo -iu openproject bundle install
sudo
passu
.