ruby-on-rails Rails Git接收后钩子无法启动Puma

gtlvzcf8  于 2023-03-13  发布在  Ruby
关注(0)|答案(1)|浏览(152)

我有两个几乎相同的post-hooks脚本,但行为不同。这是一个不工作的脚本,只支持Rails 7 API,Debian 11:

#!/bin/bash

GIT_DIR=/home/deploy/api.mydomain.com
WORK_TREE=/home/deploy/apps/api.mydomain.com

. ~/.profile

while read oldrev newrev ref
do
    if [[ $ref =~ .*/main$ ]];
    then
        echo "🚀 Main ref received. Deploying main branch to production..."
        mkdir -p $WORK_TREE
        git --work-tree=$WORK_TREE --git-dir=$GIT_DIR checkout -f main
        mkdir -p $WORK_TREE/shared/pids $WORK_TREE/shared/sockets $WORK_TREE/shared/log

        # start deploy tasks
        cd $WORK_TREE

        bundle install
        rake db:migrate

        echo "🚀 Killing existing process.."
        kill $(lsof -t -i:3002)
        echo "🚀 Starting puma..."
        bundle exec puma -C config/puma.rb -e production > /dev/null 2>&1 &
        echo "🚀 Puma is running"

        #echo "Restarting sidekiq..."
        #sudo systemctl restart sidekiq.service
        #echo "Sidekiq is running"
        # end deploy tasks

        echo "✅ Git hooks deploy complete"
    else
        echo "Ref $ref successfully received.  Doing nothing: only the main branch may be deployed on this server."
    fi
done

它不起作用,因为我最终总是需要从WORK_TREE手动运行bundle exec puma -C config/puma.rb -e production > /dev/null 2>&1 &
然而,这是一个工作,Rails 6,Debian 11:

#!/bin/bash

GIT_DIR=/home/deploy/myproject-production
WORK_TREE=/home/deploy/apps/myproject-web

. ~/.profile

while read oldrev newrev ref
do
    if [[ $ref =~ .*/main$ ]];
    then
        echo "Main ref received.  Deploying main branch to production..."
        mkdir -p $WORK_TREE
        git --work-tree=$WORK_TREE --git-dir=$GIT_DIR checkout -f main
        mkdir -p $WORK_TREE/shared/pids $WORK_TREE/shared/sockets $WORK_TREE/shared/log

        # start deploy tasks
        cd $WORK_TREE

    echo "--> Selecting Node version in the .nvmrc"
    . $HOME/.nvm/nvm.sh
    nvm use
    yarn install

    bundle install
        rake db:migrate

        bin/rails webpacker:clobber
        bin/rails assets:precompile

    echo "Killing existing process.."
    kill $(lsof -t -i:3000)
    echo "Starting puma..."
        bundle exec puma -C config/puma.rb -e production > /dev/null 2>&1 &
    echo "Puma is running"

    echo "Generating sitemap..."
    rake sitemap:refresh
    echo "Sitemap done"

    echo "Restarting sidekiq..."
    sudo systemctl restart sidekiq.service
    echo "Sidekiq is running"
    # end deploy tasks

    echo "Git hooks deploy complete"
    else
        echo "Ref $ref successfully received.  Doing nothing: only the main branch may be deployed on this server."
    fi
done

它正确地杀死正在运行的puma,然后从WORK_TREE重新启动它。
值得一提的是,我运行nginx将请求路由到puma,这是我每次推送到生产分支时得到的结果:

我知道这可能是它们运行的环境问题,但它应该是一样的,但我注意到一个奇怪的行为,每当我ssh到第一个框,它直接加载˜/.profile,从控制台中五颜六色的$用户判断,但在第二个框,它不是。

nhaq1z21

nhaq1z211#

我自己解决了这个问题。我的怀疑是对的,box中的环境变量混乱了。原因是我使用box托管多个项目,因此一些环境变量最终在~/.bashrc中,一些在~/.profile
我只是将应用程序运行所需的所有环境变量移到~/.profile
值得一提的是,我还将文件权限更改为可执行。

-rwxr-xr-x 1 deploy deploy 1107 Mar 11 19:08 hooks/post-receive

相关问题