سه تا درس سخت که بعد از یه شب دیباگ کردن یاد گرفتم واسه php کارا و مخصوصاً لاراولیا🥲
دیشب یه شب کامل درگیر بودم، آخرش به این سه تا نکته رسیدم. گفتم بنویسمشون که شما این مسیر رو دوباره اشتباه نرید. 🙏
۱️⃣ اوبونتو ۲۶ خودش PHP 8.5 رو نصب میکنه — و این یه تغییر بزرگه 🚨
من اولش فکر کردم مثل همیشه با sudo apt install php کارم راه میفته. راه افتاد، ولی PHP 8.5 نصب شد. بعد خواستم مثلا ۸.۳ نصب کنم، رفتم سراغ همون PPA قدیمی ondrej/php که همهی عمر با اون کار میکردیم. باورتون نمیشه، روی اوبونتو ۲۶.۰۴ کاملاً مردهست. خطای ۴۰۴ میداد روی فایل Release و apt فقط سر من داد میزد.
بعد از کلی گشتن فهمیدم اون PPA توی مخزن Sury ادغام شده. یعنی باید packages.sury.org رو به روش جدید deb822 و با keyring خودش اضافه کنم. تازه اونجا هم یه نکته بود: اگه نسخهی خاصی مثل ۸.۳ میخوای، باید از Sury بگیری، نه از خود اوبونتو. اوبونتو فقط همون یه نسخهی پیشفرض رو بهت میده. واقعاً کسی این تغییر رو به آدم هشدار نمیده.
کاری که خودم کردم و جواب داد 👇
گام ۱ — نصب keyring سوری:
گام ۲ — ساختن فایل مخزن Sury توی /etc/apt/sources.list.d/php.sources:
گام ۳ — آپدیت و نصب نسخهای که میخوام:
گام ۴ — چک کردن:
۲️⃣ برای Laravel Octane فقط باید octane:install بزنی 🐘
اینجا یه اشتباه دیگه کردم. رفتم مستقیم مستندات FrankenPHP رو خوندم و گفتم بذار خودم نصبش کنم روی سیستم. نکنید این کار رو.
فقط این رو بزنید:
و وقتی پرسید، FrankenPHP رو انتخاب کنید.
Laravel خودش باینری FrankenPHP رو دانلود میکنه و میذاره دقیقاً توی ریشهی پروژهتون. همون باینری اپلیکیشن رو سرو میکنه. بدون نصب سیستمی، بدون نسخههای قاطیپاتی، بدون بههمریختگی PATH، بدون اینکه با آپدیت خراب بشه.
یه دستور، یه باینری، تمام.
اگه من قبلاً به اشتباه FrankenPHP رو رو کل سیستم نصب کردم، شما این کار رو نکنید. اگه کردید، حذفش کنید و دوباره octane:install رو بزنید تا Laravel خودش صاحب باینری بشه.
۳️⃣ Octane با FrankenPHP هنوز روی PHP 8.5 کار نمیکنه ❌
این یکی بیشترین وقت من رو گرفت. همه چیز نصب بود، همه چیز سالم به نظر میرسید، ولی Octane بیخیال از اجرا شدن امتناع میکرد. آخرش فهمیدم مشکل چیه: FrankenPHP هنوز به PHP 8.5 نرسیده.
الان نسخههای امن PHP 8.4 (پیشنهاد خودم) و PHP 8.3 (که خودم دارم ازش استفاده میکنم و عالی کار میکنه) هستن.
پس اگه شما هم روی اوبونتو ۲۶ هستید و PHP 8.5 پیشفرض رو دارید، قبل از اینکه به Octane دست بزنید، CLI رو ببرید روی ۸.۴ یا ۸.۳.
اینطوری php CLI پیشفرض رو عوض کردم 👇
راه اول — برو روی ۸.۴:
راه دوم — برو روی ۸.۳ (خودم این رو انتخاب کردم):
بعد چک کنید Octane از باینری درست استفاده میکنه:
اگه بازم امتناع کرد، ببینید FPM و CLI هر دو به کجا اشاره میکنن، چون عدم تطابق بینشون باعث خرابیهای خاموش و بیسروصدا میشه که آدم رو دیوونه میکنه.
جمعبندی 🧠
اوبونتو ۲۶ کلاً روش کار با نسخههای PHP رو عوض کرده. Sury مسیر جدید، نه PPA قدیمی ondrej.
بذارید octane:install خودش FrankenPHP رو مدیریت کنه. هیچوقت خودتون جداگانه نصبش نکنید.
و هیچوقت FrankenPHP رو با PHP 8.5 جفت نکنید تا وقتی رسماً پشتیبانی بشه. برید سراغ ۸.۴، یا اگه چیز امتحانپسداده میخواید، همون ۸.۳.
امیدوارم واسه کسی تکرار نشه یا اگه شد درس عبرت بشه 🙏
#Ubuntu26 #PHP85 #PHP84 #PHP83 #LaravelOctane #FrankenPHP #SuryRepo #DevOps #Laravel #PHP #WebDev #BreakingChanges #SysAdmin
دیشب یه شب کامل درگیر بودم، آخرش به این سه تا نکته رسیدم. گفتم بنویسمشون که شما این مسیر رو دوباره اشتباه نرید. 🙏
۱️⃣ اوبونتو ۲۶ خودش PHP 8.5 رو نصب میکنه — و این یه تغییر بزرگه 🚨
من اولش فکر کردم مثل همیشه با sudo apt install php کارم راه میفته. راه افتاد، ولی PHP 8.5 نصب شد. بعد خواستم مثلا ۸.۳ نصب کنم، رفتم سراغ همون PPA قدیمی ondrej/php که همهی عمر با اون کار میکردیم. باورتون نمیشه، روی اوبونتو ۲۶.۰۴ کاملاً مردهست. خطای ۴۰۴ میداد روی فایل Release و apt فقط سر من داد میزد.
بعد از کلی گشتن فهمیدم اون PPA توی مخزن Sury ادغام شده. یعنی باید packages.sury.org رو به روش جدید deb822 و با keyring خودش اضافه کنم. تازه اونجا هم یه نکته بود: اگه نسخهی خاصی مثل ۸.۳ میخوای، باید از Sury بگیری، نه از خود اوبونتو. اوبونتو فقط همون یه نسخهی پیشفرض رو بهت میده. واقعاً کسی این تغییر رو به آدم هشدار نمیده.
کاری که خودم کردم و جواب داد 👇
گام ۱ — نصب keyring سوری:
curl -fsSLo /tmp/debsuryorg-archive-keyring.deb https://packages.sury.org/debsuryorg-archive-keyring.deb
sudo dpkg -i /tmp/debsuryorg-archive-keyring.deb
گام ۲ — ساختن فایل مخزن Sury توی /etc/apt/sources.list.d/php.sources:
Types: deb
URIs: https://packages.sury.org/php/
Suites: resolute
Components: main
Signed-By: /usr/share/keyrings/debsuryorg-archive-keyring.gpg
گام ۳ — آپدیت و نصب نسخهای که میخوام:
sudo apt update
sudo apt install php8.3 php8.3-cli php8.3-fpm php8.3-mysql php8.3-mbstring php8.3-xml php8.3-curl php8.3-zip
گام ۴ — چک کردن:
php -v
۲️⃣ برای Laravel Octane فقط باید octane:install بزنی 🐘
اینجا یه اشتباه دیگه کردم. رفتم مستقیم مستندات FrankenPHP رو خوندم و گفتم بذار خودم نصبش کنم روی سیستم. نکنید این کار رو.
فقط این رو بزنید:
php artisan octane:install
و وقتی پرسید، FrankenPHP رو انتخاب کنید.
Laravel خودش باینری FrankenPHP رو دانلود میکنه و میذاره دقیقاً توی ریشهی پروژهتون. همون باینری اپلیکیشن رو سرو میکنه. بدون نصب سیستمی، بدون نسخههای قاطیپاتی، بدون بههمریختگی PATH، بدون اینکه با آپدیت خراب بشه.
یه دستور، یه باینری، تمام.
اگه من قبلاً به اشتباه FrankenPHP رو رو کل سیستم نصب کردم، شما این کار رو نکنید. اگه کردید، حذفش کنید و دوباره octane:install رو بزنید تا Laravel خودش صاحب باینری بشه.
۳️⃣ Octane با FrankenPHP هنوز روی PHP 8.5 کار نمیکنه ❌
این یکی بیشترین وقت من رو گرفت. همه چیز نصب بود، همه چیز سالم به نظر میرسید، ولی Octane بیخیال از اجرا شدن امتناع میکرد. آخرش فهمیدم مشکل چیه: FrankenPHP هنوز به PHP 8.5 نرسیده.
الان نسخههای امن PHP 8.4 (پیشنهاد خودم) و PHP 8.3 (که خودم دارم ازش استفاده میکنم و عالی کار میکنه) هستن.
پس اگه شما هم روی اوبونتو ۲۶ هستید و PHP 8.5 پیشفرض رو دارید، قبل از اینکه به Octane دست بزنید، CLI رو ببرید روی ۸.۴ یا ۸.۳.
اینطوری php CLI پیشفرض رو عوض کردم 👇
راه اول — برو روی ۸.۴:
sudo update-alternatives --set php /usr/bin/php8.4
php -v
راه دوم — برو روی ۸.۳ (خودم این رو انتخاب کردم):
sudo update-alternatives --set php /usr/bin/php8.3
php -v
بعد چک کنید Octane از باینری درست استفاده میکنه:
php artisan octane:start --server=frankenphp
اگه بازم امتناع کرد، ببینید FPM و CLI هر دو به کجا اشاره میکنن، چون عدم تطابق بینشون باعث خرابیهای خاموش و بیسروصدا میشه که آدم رو دیوونه میکنه.
جمعبندی 🧠
اوبونتو ۲۶ کلاً روش کار با نسخههای PHP رو عوض کرده. Sury مسیر جدید، نه PPA قدیمی ondrej.
بذارید octane:install خودش FrankenPHP رو مدیریت کنه. هیچوقت خودتون جداگانه نصبش نکنید.
و هیچوقت FrankenPHP رو با PHP 8.5 جفت نکنید تا وقتی رسماً پشتیبانی بشه. برید سراغ ۸.۴، یا اگه چیز امتحانپسداده میخواید، همون ۸.۳.
امیدوارم واسه کسی تکرار نشه یا اگه شد درس عبرت بشه 🙏
#Ubuntu26 #PHP85 #PHP84 #PHP83 #LaravelOctane #FrankenPHP #SuryRepo #DevOps #Laravel #PHP #WebDev #BreakingChanges #SysAdmin
❤1
Crazy Dev ❤️🔥💻 pinned «سه تا درس سخت که بعد از یه شب دیباگ کردن یاد گرفتم واسه php کارا و مخصوصاً لاراولیا🥲 دیشب یه شب کامل درگیر بودم، آخرش به این سه تا نکته رسیدم. گفتم بنویسمشون که شما این مسیر رو دوباره اشتباه نرید. 🙏 ۱️⃣ اوبونتو ۲۶ خودش PHP 8.5 رو نصب میکنه — و این یه تغییر…»
This media is not supported in your browser
VIEW IN TELEGRAM
رباتی که میتواند تا ۴۶ کیلومتر بر ساعت بدود ...
🔥1
Forwarded from S
This media is not supported in your browser
VIEW IN TELEGRAM
Forwarded from S
This media is not supported in your browser
VIEW IN TELEGRAM
Forwarded from S
This media is not supported in your browser
VIEW IN TELEGRAM
Forwarded from S
This media is not supported in your browser
VIEW IN TELEGRAM
Forwarded from S
This media is not supported in your browser
VIEW IN TELEGRAM
America.gov
دونالد ترامپ امروز سندی رو امضا کرد واسه یک سایت واحد واسه دولت آمریکا
و جمع کردن ۲۹۰۰۰ وبسایت داخل همین یکی
با قدرت هوش مصنوعی
دونالد ترامپ امروز سندی رو امضا کرد واسه یک سایت واحد واسه دولت آمریکا
و جمع کردن ۲۹۰۰۰ وبسایت داخل همین یکی
با قدرت هوش مصنوعی
Forwarded from The Developer's Journey❤️🔥
🚀 Cost Management API - v3
پروژه رو یک مرحله دیگه جلو بردم و این بار تمرکزم بیشتر روی بخش Authentication و ارتباط User با Cost ها بود.
🛠 تغییرات:
• اضافه شدن ثبتنام و Login کاربران
• اضافه شدن احراز هویت با JWT و Cookie
• اضافه شدن Access Token و Refresh Token
• ایجاد رابطه بین User و Cost
• محدود شدن دسترسی هر کاربر به هزینههای خودش
• اضافه شدن بررسی احراز هویت در Endpoint های مربوط به User و Cost
🧠 چیزهایی که یاد گرفتم:
• پیادهسازی ثبتنام و Login
• کار با JWT و Cookie برای احراز هویت
• Access Token و Refresh Token و نحوه استفاده از آنها
• ایجاد Relationship بین User و Cost در Database
• بررسی کاربر احراز هویتشده در Endpoint ها و استفاده از اطلاعات User برای دسترسی به دادههای مربوط به خودش
🤔 چیزی که برام جالب و البته سخت بود:
انتخاب روش احراز هویت و اینکه برای هر روش چه دلیلی وجود داره.
این بخش باعث شد فقط به «چطور پیادهسازی کنم؟» فکر نکنم و بیشتر به این فکر کنم که «چرا این روش رو انتخاب کنم؟» و هر روش چه مزایا و محدودیتهایی داره.
🔗 Repository:
https://github.com/amirh-rahimi/Cost-Management-API
#Python #FastAPI #Authentication #Backend #CostManagementAPI_V3 #TheDevelopersJourney
پروژه رو یک مرحله دیگه جلو بردم و این بار تمرکزم بیشتر روی بخش Authentication و ارتباط User با Cost ها بود.
🛠 تغییرات:
• اضافه شدن ثبتنام و Login کاربران
• اضافه شدن احراز هویت با JWT و Cookie
• اضافه شدن Access Token و Refresh Token
• ایجاد رابطه بین User و Cost
• محدود شدن دسترسی هر کاربر به هزینههای خودش
• اضافه شدن بررسی احراز هویت در Endpoint های مربوط به User و Cost
🧠 چیزهایی که یاد گرفتم:
• پیادهسازی ثبتنام و Login
• کار با JWT و Cookie برای احراز هویت
• Access Token و Refresh Token و نحوه استفاده از آنها
• ایجاد Relationship بین User و Cost در Database
• بررسی کاربر احراز هویتشده در Endpoint ها و استفاده از اطلاعات User برای دسترسی به دادههای مربوط به خودش
🤔 چیزی که برام جالب و البته سخت بود:
انتخاب روش احراز هویت و اینکه برای هر روش چه دلیلی وجود داره.
این بخش باعث شد فقط به «چطور پیادهسازی کنم؟» فکر نکنم و بیشتر به این فکر کنم که «چرا این روش رو انتخاب کنم؟» و هر روش چه مزایا و محدودیتهایی داره.
🔗 Repository:
https://github.com/amirh-rahimi/Cost-Management-API
#Python #FastAPI #Authentication #Backend #CostManagementAPI_V3 #TheDevelopersJourney
GitHub
GitHub - amirh-rahimi/Cost-Management-API: A simple API for managing costs with CRUD operations (Create, Read, Update, Delete).
A simple API for managing costs with CRUD operations (Create, Read, Update, Delete). - amirh-rahimi/Cost-Management-API
❤1