محاولة واحدة للحفاظ على بيئة تطوير محدثة

كما رثيت هنا، غالبًا ما أشعر أنني أقضي وقتًا أطول في محاولة تحديث بيئة التطوير الخاصة بي أكثر من كتابة التعليمات البرمجية.

لدي برنامج نصي أستخدمه لبدء تشغيل Discourse مع مجموعة من إعدادات ENV التي تقوم أيضًا بالكثير من الأشياء الأخرى. اليوم فشل في الحصول على الإصدار الصحيح من nodejs وقضيت وقتًا أطول في تحديثه. حتى أنني قمت بأشياء مثل grep لإخراج المخرجات المزعجة من asdf وما شابه. إليك الجزء الذي يقوم بتحديث Discourse.

إليك ما يفعله:

  • استرداد و/أو تحديث مستودعات all-the-plugins و all-the-themes. هذه مفيدة جدًا للعثور على أمثلة لكيفية القيام بالأشياء. إذا تم تنزيلها في آخر 100 دقيقة، فإنه يتخطى هذه الخطوة.
  • docker pull أحدث إصدار أساسي (هذه الخطوة الحاسمة المفقودة هي سبب قضائي الكثير من الوقت في هذا اليوم - بطريقة ما اعتقدت أن القيام بـ git pull في discourse_docker سيقوم بذلك :person_shrugging: )
  • 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
إعجابَين (2)

هل هذا لبيئات التطوير المحلية باستخدام Docker، صحيح؟

لا. بدون دوكر. إذا كنت تستخدم دوكر، فسيتم التعامل مع كل هذا في حاوية دوكر.

إعجاب واحد (1)

جاي، أتمنى لو كان بإمكاني التفاعل مع عدة :chefs_kiss:.

تم الاختبار على أوبونتو في WSL كغير مستخدم جذر، وواجهت بعض العقبات والأشياء التي يجب القيام بها قبل تشغيله بنجاح.

كان علي فقط:

  • تثبيت asdf[1] كما هو موضح في دليلك و nodejs[2] قبل تشغيل البرنامج النصي.

  • تشغيل sudo chown -R $(whoami):$(whoami) ~/discourse لأنني واجهت مشاكل في الأذونات[3] عندما قام البرنامج النصي بتشغيل pnpm dedupe. لست متقنًا تمامًا للغة لينكس، لذا ربما هناك حل أكثر ملاءمة.

اقتراح صغير لجعل هذا الدليل أكثر أناقة، ربما استخدام عناصر نائبة لاستبدال متغيرات المسارات في بداية كتلة التعليمات البرمجية الخاصة بك. ليس أن ذلك سيجعل الأمور مريحة للغاية، ولكنه سيكون لمسة لطيفة. :smile:


  1. Getting Started | asdf ↩︎

  2. asdf plugin add nodejs https://github.com/asdf-vm/asdf-nodejs.git ↩︎

  3. EACCES: permission denied, unlink '/home/coco/discourse/app/assets/javascripts/discourse-plugins/node_modules/ember-this-fallback' ↩︎

إعجاب واحد (1)

هممم. نعم. ربما يجب أن يتحقق من تثبيت nodejs. لست متأكدًا من كيفية تثبيت nodejs على جهاز جديد.

شكرا

إعجاب واحد (1)