كما رثيت هنا، غالبًا ما أشعر أنني أقضي وقتًا أطول في محاولة تحديث بيئة التطوير الخاصة بي أكثر من كتابة التعليمات البرمجية.
لدي برنامج نصي أستخدمه لبدء تشغيل Discourse مع مجموعة من إعدادات ENV التي تقوم أيضًا بالكثير من الأشياء الأخرى. اليوم فشل في الحصول على الإصدار الصحيح من nodejs وقضيت وقتًا أطول في تحديثه. حتى أنني قمت بأشياء مثل grep لإخراج المخرجات المزعجة من asdf وما شابه. إليك الجزء الذي يقوم بتحديث Discourse.
إليك ما يفعله:
- استرداد و/أو تحديث مستودعات all-the-plugins و all-the-themes. هذه مفيدة جدًا للعثور على أمثلة لكيفية القيام بالأشياء. إذا تم تنزيلها في آخر 100 دقيقة، فإنه يتخطى هذه الخطوة.
docker pullأحدث إصدار أساسي (هذه الخطوة الحاسمة المفقودة هي سبب قضائي الكثير من الوقت في هذا اليوم - بطريقة ما اعتقدت أن القيام بـgit pullفيdiscourse_dockerسيقوم بذلك
)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 "MISSING THE PLUGINS"
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 "\nUpdating the plugins\n "
./reset-all-repos
fi
if ! [[ -d $ALL_THE_THEMES ]]; then
echo "MISSING THE THEMES!!!"
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 "\nUpdating themes. . .\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 "Got 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 "Got 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 get node version from the base container!
NODE_VERSION=$(docker run discourse/base:release bash -c 'node --version'|cut -d'v' -f2)
echo "GOT NODEJS version: $NODE_VERSION"
asdf install nodejs $NODE_VERSION|grep -v "already"
asdf global nodejs $NODE_VERSION|grep -v "already"
npm install -g pnpm
# end of version updates
cd $DISCOURSE_SRC
git checkout main
git pull
bundle install
echo -e "\n-----------> Running pnpm update. . .\n"
pnpm update
echo -e "\n-----------> Running pnpm dedupe. . .\n"
pnpm dedupe
echo -e "\n-----------> Migrating the databases. . .\n"
LOAD_PLUGINS=1 ./bin/rake db:migrate
LOAD_PLUGINS=1 RAILS_ENV=test ./bin/rake db:migrate
exit
fi