这是应运行的bash代码。因此,首先它将用户替换为openproject,然后运行所有代码
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
我尝试将上面的脚本修改为:
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"
但这不能正常运行,并且每个步骤都要求输入密码。如何改进翻译后的脚本以使其正常工作?
更新1:
在收到有关此问题的建议后,我将代码修改为:
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
输出正常,直到在代码中声明的行为止。从那里我得到4错误
sudo:捆绑:找不到命令
更新2:
在尝试了Dmitry Vasilyanov的建议之后,我发现如果我插入-i,它将模拟为用户登录。但是,这不是最终的方法。
如果我echo $PATH
以openproject登录后运行,则输出为/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games:/home/openproject/.rvm/bin
如果我echo $PATH
在su openproject -c "bash -l"
输出后运行/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
,因为它是内置的shell。
sudo
用于以其他用户身份运行,root
如果未指定,则为默认值,您可以完美执行sudo -u openproject bundle install
。
bundle: command not found
,因为你设置错误PATH
或者GEM_PATH
在你.bash_profile
或.bashrc
他们没有在非登陆/非交互shell执行,所以你需要传递-i
给sudo
来模拟登录,就像这样:sudo -iu openproject bundle install
sudo
不要su
。