簡體   English   中英

從 init.d 服務腳本啟動 rails 並加載正確版本的 ruby

[英]start rails from init.d service script and loads the correct version of ruby

我想在安裝、遷移和運行一些腳本后以生產模式啟動rails服務器,以便將此腳本附加為管道部署腳本。

問題是相同的腳本不能作為服務模式工作。

ubuntu@ip-xyzw:~/backend.rails.com$ sudo vim /etc/init.d/rails-start-backend

#! /bin/sh
# Start/stop the rails server daemon.
#
### BEGIN INIT INFO
# Provides:          rails server start
# Required-Start:    $remote_fs $syslog
# Required-Stop:     $remote_fs $syslog
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Start daemon at boot time
# Description:       Enable service provided by daemon.
### END INIT INFO

PATH=/bin:/usr/bin:/sbin:/usr/sbin
DESC="rails daemon"
NAME=rails
DAEMON=/home/ubuntu/backend.rails.com/gitlab-ci.sh
PIDFILE=/var/run/rails.pid

test -f $DAEMON || exit 0

. /lib/lsb/init-functions


case "$1" in

start)
        log_daemon_msg "Starting rails"
        /home/ubuntu/backend.rails.com/gitlab-ci.sh > /home/ubuntu/backend.rails.com/log/start_script.log
        start_daemon -p $PIDFILE $DAEMON $EXTRA_OPTS
        log_end_msg $?
        ;;
stop)   log_daemon_msg "Stopping rails" "rails"
        sudo kill -9 $(sudo lsof -t -i:3000)
        killproc -p $PIDFILE $DAEMON
        RETVAL=$?
        [ $RETVAL -eq 0 ] && [ -e "$PIDFILE" ] && rm -f $PIDFILE
        log_end_msg $RETVAL
        ;;

restart) log_daemon_msg "Restarting " "rails"
        $0 stop
        $0 start
        ;;
reload|force-reload) log_daemon_msg "Reloading rails" "rails"
        # rails reloads automatically
        log_end_msg 0
        ;;
*)      log_action_msg "Usage: /etc/init.d/rails {start|stop|status|restart|reload|force-reload}"
        exit 2
        ;;
esac
exit 0 

這就是我的gitlab-ci.sh腳本

cd /home/ubuntu/backend.rails.com
sudo chmod +x gitlab-ci.sh 
rm config/master.key
rm config/credentials.yml.enc
echo "credentials"
RAILS_ENV=production EDITOR="mate --wait" rails credentials:edit
export RAILS_ENV=production 
export FRONTEND_BASE_URL=https://www.rails.com 
echo "bundle install"
bundle install
echo "rails db:migrate"
bundle exec rails db:migrate
echo "rails rake application:initialize"
bundle exec rake application:initialize
echo "kill"
sudo kill -9 $(sudo lsof -t -i:3000)
echo "start"
rails s &

當我重新啟動sudo service rails-start-backend restart服務時,問題就出現了。 似乎在這種情況下,所有 bundle、rails 和 ruby​​ 版本和設置都與我在 ssh 中手動執行相同的腳本時不同。

我得到的錯誤是:

/usr/bin/env: ‘ruby_executable_hooks2.6’: No such file or directory
bundle: not found

這是我登錄 ssh 時的路徑

/home/ubuntu/.rvm/gems/ruby-2.6.5/bin:/home/ubuntu/.rvm/gems/ruby-2.6.5@global/bin:/usr/share/rvm/rubies/ruby-2.6.5/bin:/usr/share/rvm/bin:/home/ubuntu/bin:/home/ubuntu/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin

然后當腳本作為服務執行時

/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games

它在為正確的變量設置正確的路徑后工作(使用2.6.5 ruby 版本)

export PATH=/home/ubuntu/.rvm/gems/ruby-2.6.5/bin:/usr/share/rvm/bin:$PATH
export GEM_PATH=/home/ubuntu/.rvm/gems/ruby-2.6.5:/home/ubuntu/.rvm/gems/ruby-2.6.5@global:$GEM_PATH
source .bash_profile
source ~/.rvm/scripts/rvm

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM