Dies ist der Bash-Code, der ausgeführt werden sollte. Zuerst ersetzt es den Benutzer durch openproject und führt dann den gesamten Code aus
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
Ich habe versucht, das obige Skript wie folgt zu schreiben:
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"
Dies funktioniert jedoch nicht ordnungsgemäß und fordert Sie bei jedem Schritt zur Eingabe eines Kennworts auf. Wie kann das übersetzte Skript verbessert werden, damit es funktioniert?
UPDATE 1:
Nachdem ich Vorschläge dazu erhalten habe, bin ich der Punkt, an dem der Code geändert wurde 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
Die Ausgabe ist in Ordnung bis zu der Zeile, die dies im Code angibt. Von dort bekomme ich 4 fehler
sudo: bundle: befehl nicht gefunden
UPDATE 2:
Nachdem ich den Vorschlag von Dmitry Vasilyanov ausprobiert hatte, stellte ich fest, dass, wenn ich das -i einfüge, dies als Benutzeranmeldung simuliert wird. Dies ist jedoch nicht der letzte Weg, dies zu tun.
Wenn ich echo $PATH
nach dem Einloggen als openproject laufe ist die Ausgabe/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games:/home/openproject/.rvm/bin
Wenn ich laufe echo $PATH
nach su openproject -c "bash -l"
dem Ausgang/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
, da es eine eingebaute Shell ist.
sudo
wird verwendet, um als anderer Benutzer root
ausgeführt zu werden sudo -u openproject bundle install
. Wenn nichts angegeben ist, können Sie dies standardmäßig perfekt ausführen .
bundle: command not found
Fehler , weil Sie setzen PATH
oder GEM_PATH
in Ihrem .bash_profile
oder .bashrc
werden sie in nicht-Login / nicht-interaktive Shell nicht ausgeführt, so dass Sie übergeben müssen , -i
um sudo
zu simulieren , Login, wie folgt aus :sudo -iu openproject bundle install
sudo
nichtsu
.