我有两个几乎相同的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
,从控制台中五颜六色的$用户判断,但在第二个框,它不是。
1条答案
按热度按时间nhaq1z211#
我自己解决了这个问题。我的怀疑是对的,box中的环境变量混乱了。原因是我使用box托管多个项目,因此一些环境变量最终在
~/.bashrc
中,一些在~/.profile
中我只是将应用程序运行所需的所有环境变量移到
~/.profile
值得一提的是,我还将文件权限更改为可执行。