إضافات Ember تحل كاعتمادات نظير غير صحيحة. -- تم الإصلاح بإزالة "content-tag@3.1.0": "patches/content-tag@3.1.0.patch"

أقسم أنني أقضي 2-4 ساعات أسبوعيًا في الحفاظ على عمل نسخة التطوير الخاصة بي.

أقوم بتشغيل pnpm dedupe.

pfaffman@noreno:~/src/discourse-repos/discourse$ bin/ember-cli
Scope: all 17 workspace projects
Lockfile is up to date, resolution step is skipped
Already up to date
Done in 1.3s
Some V1 ember addons are resolving as incorrect peer dependencies. This makes it impossible for us to safely convert them to v2 format.

  👇 👇 👇
👉 See https://github.com/embroider-build/embroider/blob/main/docs/peer-dependency-resolution-issues.md for an explanation of the problem and suggestions for fixing it.
  👆 👆 👆

discourse@0.0.0 (dev)-> discourse-plugins@1.0.0 -> ember-this-fallback@0.4.0
  sees peerDep ember-source@5.12.0
    at /home/pfaffman/src/discourse-repos/discourse/node_modules/.pnpm/ember-source@5.12.0_patch_hash=xx7mvsb7nmshqkkqhmf45r3hse_@glimmer+component@1.1.2_@babel+cor_fw7srrjre4qclkyiv6wvjvr6va/node_modules/ember-source
  but discourse@0.0.0 is using ember-source@5.12.0
    at /home/pfaffman/src/discourse-repos/discourse/node_modules/.pnpm/ember-source@5.12.0_patch_hash=xx7mvsb7nmshqkkqhmf45r3hse_@glimmer+component@1.1.2_@babel+cor_stof4qukza26ryuxyhy7me4cya/node_modules/ember-source

ثم قمت بإزالة الإضافات الخاصة بي وحاولت مرة أخرى وحصلت على هذا الخطأ:


pnpm install -r
Scope: all 17 workspace projects
 ERR_PNPM_PATCH_NOT_APPLIED  The following patches were not applied: content-tag@3.1.0

Either remove them from "patchedDependencies" or update them to match packages in your dependencies.
Progress: resolved 1786, reused 1734, downloaded 0, added 0

انتهى بي الأمر بإزالة هذا السطر لجعل ember يعمل:

إليك ما أفعله عند سحب إصدار جديد من discourse:

  cd "$DISCOURSE_SRC"
  # NOTE: if bundler is broken, try `gem install bundler -v 2.5.3`

  # Fine. We'll be in charge of at least creating a database
  if psql -d discourse_development -c '\q' 2>/dev/null; then
    # connection successful
    echo "WE have postgres."
  else
    echo "No have discourse database"
    cd /tmp && sudo su -c "su postgres -c 'createuser -s \"$USER\"'"
    cd $DISCOURSE_SRC
    LOAD_PLUGINS=1 ./bin/rails db:create
    LOAD_PLUGINS=1 RAILS_ENV=test ./bin/rails db:create
    echo "CREATE EXTENSION IF NOT EXISTS vector;" | psql
  fi

  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 2>&1 |grep -v "already"
  asdf plugin add imagemagick 2>&1 |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)
  LOCAL_RUBY_VERSION=$(ruby --version|cut -d' ' -f2)
  echo "Got RUBY_VERSION $RUBY_VERSION"
  asdf install ruby $RUBY_VERSION 2>&1 |grep -v "already"
  asdf global ruby $RUBY_VERSION 2>&1 |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 2>&1 |grep -v "already"
  asdf global imagemagick $IMAGE_MAGICK_VERSION 2>&1 |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 2>&1|grep -v "already"
  asdf global nodejs $NODE_VERSION 2>&1|grep -v "already"

  npm install -g pnpm

  # end of version updates
  cd $DISCOURSE_SRC
  git checkout main
  git pull
  bundle install
  rm -rf node_modules pnpm-lock.yaml
  pnpm install -r --fix-lockfile

  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/rails db:migrate
  LOAD_PLUGINS=1 RAILS_ENV=test ./bin/rails db:migrate
  exit
إعجابَين (2)

لماذا؟ هذا يغير ملف القفل (lockfile)، وهو أمر لا تريد فعله حقًا (إلا إذا كنت تحاول عمدًا تغيير تبعيات Discourse). إذا كنت لا تريد تغيير التبعيات، فإن الأمر الوحيد الذي ستحتاجه من pnpm هو pnpm install.

المشاكل التي وصفتها تبدو وكأنها قد تكون ناتجة عن اختلاف ملف pnpm lockfile الخاص بك عن ملف core. أوصي بالتحقق من أي اختلاف (على سبيل المثال، عبر git status، أو أي واجهة رسومية تستخدمها لـ git). إذا كان هناك اختلاف، فقم بإعادة تعيينه (على سبيل المثال، عبر git restore pnpm-lock.yaml).

ذو صلة محتملة: أوصي بإزالة --fix-lockfile من نص التثبيت الخاص بك. لا ينبغي أبدًا أن يحتاج ملف قفل core إلى “إصلاح”، لذا فإن تشغيل هذا محليًا من المرجح أن يتسبب في حدوث اختلاف.

بالمناسبة، هل جربت استخدام إعداد devcontainer. يهدف إلى إزالة هذا النوع من الصيانة بالكامل تقريبًا.

على الرغم من أنه بصراحة، إذا كانت هذه المشكلة بالفعل هي أنك قمت بتعديل ملف pnpm lockfile الخاص بك، فقد يحدث ذلك في devcontainer أيضًا :sweat_smile:

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

أوه، نعم… هذا سيفي بالغرض :eyes:

استخدم ملف القفل الأساسي. إذا قمت بحذفه وأعدت إنشاء واحد من package.json، فستحصل على أحدث إصدار مطلق لكل تبعية، مما سيؤدي بالتأكيد إلى حدوث مشكلات.

أيضًا بالمناسبة، pnpm جيد جدًا في الحفاظ على node_modules مرتبة، لذلك لا تحتاج إلى حذفه في كل مرة تسحب فيها الأساس. كل ما أفعله عند سحب الأساس هو bundle install && pnpm install && bin/rake db:migrate.

لأن هذا أصلح المشكلة الأخيرة التي واجهتني؟

شيء آخر جربت إضافته اليوم؛ سأزيل هذا.

لم أغيره عن قصد… من الصعب جعل الأشياء مقاومة للحماقة عندما يكون الحمقى بارعين للغاية.

ربما كان git clean -f هو ما كنت أحتاجه. :person_shrugging:

ليس منذ سنوات. أعتقد أنني اعتقدت أنه أبطأ؛ ربما هذا أقل صحة الآن؟ ربما يجب أن أجربها مرة أخرى؟ هل تستخدمها؟

هذا دليل جديد تمامًا - إنه ليس نفس الشيء مثل دليل “docker dev” القديم. (في الواقع… هذا يذكرني… يجب علينا ربما إيقاف/إزالة هذا الدليل القديم)

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

لا أستخدمه بنسبة 100٪ من الوقت، ولكني أستخدمه للمهام الصغيرة المستقلة عندما لا أرغب في لمس بيئة التطوير الرئيسية الخاصة بي. على سبيل المثال: عند سحب طلب سحب لشخص آخر أثناء المراجعة. أو إذا كنت بحاجة إلى إجراء بعض الاختبارات/التطوير على الفرع stable.

يبدو جيدًا! أخبرنا إذا كان ذلك سيؤدي إلى عمل الأشياء :crossed_fingers:

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

يبدو أن git clean -f قد أصلح المشكلة. لدي نسخة متفرعة من Discourse في مكان آخر يمكنني تعديلها لتقديم طلب سحب، ولكن هذه النسخة من المصدر الأصلي، لذا فإن التخلص من أي تغييرات ليس مشكلة (وربما كانت أي تغييرات مجرد حوادث على أي حال).

أنا في الغالب أستخدم بيئة التطوير الخاصة بي فقط لتطوير الإضافات.

إنه يعمل مرة أخرى الآن، وآمل بحذر أن يعمل برنامجي النصي لبضع مرات قادمة على الأقل!

إعجابَين (2)

لم أتمكن اليوم من تشغيل بيئة التطوير الخاصة بي لأن Discourse أصر على pnpm 9.15.5 و npm أصر على تثبيت 10 شيء. pnpm --version سيخبرني 10.x في دليلي الرئيسي، ولكنه سيرفض التشغيل في دليل Discourse. استغرق الأمر كل فترة ما بعد الظهيرة. انتهى بي الأمر بإلغاء تثبيت pnpm باستخدام npm وبدلاً من ذلك أضفت هذا إلى برنامج التحديث الخاص بي:

  PNPM_VERSION=$(docker run discourse/base:release bash -c 'pnpm --version'|cut -d'v' -f2)
  echo "GOT PNPM version: $PNPM_VERSION"
  asdf install pnpm $PNPM_VERSION 2>&1|grep -v "already"
  asdf global pnpm $PNPM_VERSION 2>&1|grep -v "already"

يبدو أن هذا يعمل.

حاولت استخدام سحر التطوير في Docker، لكنني لم أتمكن من معرفة كيفية تمرير متغيرات البيئة إليه، ولم يكن لديه حتى DISCOURSE_DEV_ALLOW_ANON_TO_IMPERSONATE معينًا، لذلك لم أتمكن من تسجيل الدخول.

والآن أحصل على هذا مرة أخرى:

 Error encountered while starting Sidekiq: [Discourse::Utils::CommandError] /home/pfaffman/src/discourse-repos/discourse/lib/discourse.rb:139:in `exec': renice: failed to set priority for 116553 (process ID): Permission denied

أعتقد أنني أصلحتها من قبل عن طريق تحرير . . . شيء ما.

حسنًا. إليك كيفية إصلاح مشكلة nice. أقسم أنني لا أفهم كيف أنني الوحيد الذي واجه هذه المشكلة.

في ملف مثل

sudo nano /etc/security/limits.d/90-pfaffman-nice.conf

أضف شيئًا مثل

pfaffman soft priority 5
pfaffman hard priority 5
إعجاب واحد (1)

طالما لديك هذا الالتزام في النواة، فمن الناحية النظرية يجب أن تعود pnpm 10.x تلقائيًا إلى pnpm 9 عند تشغيلها في النواة. لا تحتاج إلى أي تقنية تثبيت مخصصة.
بعد إصدار pnpm 10 مباشرة، واجه بعض أعضاء الفريق مشاكل، وتمكنوا من حلها عن طريق تشغيل pnpm self-update 9. ولكن منذ أن أضفنا هذا الإعداد الجديد إلى النواة، لا أعتقد أن أي شخص احتاج إلى القيام بأي شيء يدويًا.

هل تستخدم VSCode؟ إذا كنت تستخدم المهام المحددة مسبقًا، فيمكنك إضافة متغيرات البيئة في tasks.json. إذا كنت تقوم بتشغيل rails/ember عبر طرفية VSCode، فيمكنك إضافة متغيرات البيئة كبادئة مثل أي طرفية أخرى.

هذا شيء جديد بالنسبة لي :sweat_smile:. يسعدني أنك تمكنت من حله على الرغم من ذلك!
أنا فضولي، ما هو نظام تشغيل لينكس الذي تستخدمه؟

أنا على d2a34bed8439557bfc37b8c08f89271be6903015 (والذي يجب أن يكون بعد ذلك. لقد حاول تشغيل pnpm 9، ولكنه لم يكن في أي مكان يمكنه العثور عليه، لذلك رفض التشغيل لأنه أراد بشدة نسخته الخاصة. ولم يكن هناك شيء يمكنني فعله لتثبيته حتى أخذت الأمور في يد asdf.

يا إلهي. لا. لقد بحثت عن “تطوير دوكر” وخمنت أنني حصلت على الطريقة القديمة: Install Discourse for development using Docker. هل يمكن لأحد أن يربطها بـ Developing Discourse using a Dev Container إذا كان هذا ما نريده الآن؟

أنا أستخدم POP!OS، والذي اعتقدت أنه في الغالب أوبونتو عادي في الخلفية، ولكن ربما يغيرون قيم renice و أنا الوحيد الذي حدث له هذا. لا أتذكر متى بدأ، ولكن هذه المرة قمت أخيرًا بإصلاحه على مستوى نظام التشغيل وليس عن طريق تحرير النواة!

إعجابَين (2)