正如我在此抱怨的那样,我经常觉得我花在保持开发环境最新上的时间比写代码的时间还多。
我有一个脚本,用于启动 Discourse,并设置一堆环境变量,同时还执行其他一些操作。今天,它未能获取正确的 nodejs 版本,我又花了更多时间来更新它。我甚至还做了诸如 grep asdf 的嘈杂输出之类的事情。这是更新 Discourse 的部分。
它的作用是:
- 检索和/或更新 all-the-plugins 和 all-the-themes 存储库。这些对于查找如何做事的示例非常有用。如果它们在过去 100 分钟内已被下载,则跳过此步骤。
docker pull最新的基础版本(缺少此关键步骤是我今天花费大量时间的原因——不知何故,我以为在discourse_docker中执行git pull就可以做到
)。docker run基础镜像以获取 Ruby、Imagemagick 和 node 的版本;然后使用asdf全局安装和应用这些版本。(它假定您已安装asdf——我在我的newmachine脚本中处理了这个问题)。- 在 discourse 目录中,签出 main,执行 git pull,运行 pnpm update 和 dedupe。
- 迁移数据库和测试数据库。
我只在 Linux(Pop!OS,主要是 Ubuntu)上测试过它。
SRC=~/src/discourse-repos
DISCOURSE_SRC=/home/pfaffman/src/discourse-repos/discourse
ALL_THE_PLUGINS=~/src/discourse-repos/all-the-plugins
ALL_THE_THEMES=~/src/discourse-repos/all-the-themes
ARG=$1
COMMAND=""
if [[ "$ARG" == "update" ]] || [[ "$ARG" == "upgrade" ]]
then
# 注意:如果 bundler 损坏,请尝试 `gem install bundler -v 2.5.3`
if ! [[ -d $ALL_THE_PLUGINS ]]; then
echo "缺少插件"
cd $SRC
git clone https://github.com/discourse/all-the-plugins
cd $ALL_THE_PLUGINS
./reset-all-repos
fi
cd $ALL_THE_PLUGINS
if [ -z "$(find official -mmin -100)" ]; then
echo -e "\n正在更新插件\n "
./reset-all-repos
fi
if ! [[ -d $ALL_THE_THEMES ]]; then
echo "缺少主题!!!"
sleep 5
cd $SRC
git clone https://github.com/discourse/all-the-themes
cd $ALL_THE_THEMES
./reset-all-repos
fi
cd $ALL_THE_THEMES
if [ -z "$(find official -mmin -100)" ]; then
echo -e "\n正在更新主题. . .\n"
./reset-all-repos
fi
asdf plugin add ruby |grep -v "already"
asdf plugin add imagemagick |grep -v "already"
asdf plugin update --all > /dev/null
docker pull discourse/base:release
RUBY_VERSION=$(docker run discourse/base:release bash -c 'ruby --version'|cut -d' ' -f2)
echo "获取到 RUBY_VERSION $RUBY_VERSION"
asdf install ruby $RUBY_VERSION|grep -v "already"
asdf global ruby $RUBY_VERSION|grep -v "already"
IMAGE_MAGICK_VERSION=$(docker run discourse/base:release bash -c 'convert --version'|head -1|cut -d' ' -f3)
echo "获取到 IMAGE_MAGICK_VERSION: $IMAGE_MAGICK_VERSION"
asdf install imagemagick $IMAGE_MAGICK_VERSION|grep -v "already"
asdf global imagemagick $IMAGE_MAGICK_VERSION|grep -v "already"
# 2025-01-13 从基础容器获取 node 版本!
NODE_VERSION=$(docker run discourse/base:release bash -c 'node --version'|cut -d'v' -f2)
echo "获取到 NODEJS 版本: $NODE_VERSION"
asdf install nodejs $NODE_VERSION|grep -v "already"
asdf global nodejs $NODE_VERSION|grep -v "already"
npm install -g pnpm
# 版本更新结束
cd $DISCOURSE_SRC
git checkout main
git pull
bundle install
echo -e "\n-----------> 正在运行 pnpm update. . .\n"
pnpm update
echo -e "\n-----------> 正在运行 pnpm dedupe. . .\n"
pnpm dedupe
echo -e "\n-----------> 正在迁移数据库. . .\n"
LOAD_PLUGINS=1 ./bin/rake db:migrate
LOAD_PLUGINS=1 RAILS_ENV=test ./bin/rake db:migrate
exit
fi