Liberapay هي منصة تبرعات متكررة. نحن نساعدك على تمويل المبدعين والمشاريع التي تقدرها.
ملاحظة: هذا webapp غير قابل للاستضافة ذاتيا.
تريد الدردشة؟ انضم إلينا على Gitter.
بدلاً من ذلك ، يمكنك نشر رسالة في صالون GitHub الخاص بنا.
يمكنك المساعدة في ترجمة Liberapay عبر ووب وينج. الوضع الحالي:
إذا كانت لديك أسئلة حول ترجمة Liberapay ، فيمكنك طرحها في الصالون.
تم تشويه Liberapay في الأصل من GrotiPay ورثت Web-Framework Pando ( Né Aspen) ، والذي يعتمد على توجيه نظام الملفات والتبسيط. لا تقلق ، الأمر بسيط للغاية. على سبيل المثال ، لجعل Liberapay Return a Hello $user, your id is $userid رسالة للطلبات إلى url /$user/hello ، تحتاج فقط إلى إنشاء ملف www/%username/hello.spt مع هذا داخل:
from liberapay.utils import get_participant
[---]
participant = get_participant(state)
[---] text/html
{{ _("Hello {0}, your id is {1}", request.path['username'], participant.id) }}
كما يتضح من السطر الأخير محرك القالب الافتراضي هو Jinja.
تحاول الدالة _ ترجمة الرسالة إلى لغة المستخدم وتهرب من المتغيرات بشكل صحيح (تعرف أنها تولد رسالة لصفحة HTML).
رمز Python Inside Inside هو فقط للمنطق الخاص بالطلب ، رمز الخلفية المشتركة في liberapay/ Directory.
تأكد من تثبيت التبعيات التالية أولاً:
ثم قم بالتشغيل:
make env
أنت الآن بحاجة إلى منح نفسك قوى Postgres Superuser (إذا لم يتم ذلك بالفعل) ، وإنشاء قواعد بيانات:
su postgres -c "createuser --superuser $(whoami)"
createdb liberapay
createdb liberapay_tests
إذا كنت بحاجة إلى فهم أعمق ، ألقِ نظرة على أدوار قاعدة البيانات وإدارة أقسام قواعد البيانات في وثائق PostgreSQL.
ثم يمكنك إعداد DB:
make schema
يتم استخدام متغيرات البيئة للتكوين ، والقيم الافتراضية في defaults.env tests/test.env يمكنك تجاوزها في local.env tests/local.env على التوالي.
بمجرد تثبيت كل شيء وإعداد قاعدة البيانات ، يمكنك تشغيل التطبيق:
make run
يجب الآن الوصول إلى http: // localhost: 8339/.
لا يوجد مستخدمون يتم توفيرهم افتراضيًا. يمكنك إنشاء حسابات كما تفعل على موقع الويب الحقيقي ، وإذا كنت تريد ، يمكنك أيضًا إنشاء مجموعة من المستخدمين المزيفين (لكنهم ليسوا رائعين):
make data
لمنح أذونات المسؤول إلى حساب ما ، قم بتعديل قاعدة البيانات مثل SO:
psql liberapay -c "update participants set privileges = 1 where username = 'account-username'"
لتشغيل يوم الدفع المحلي مفتوح http: // localhost: 8339/admin/payday وانقر فوق الزر "Run Payday". يمكنك إضافة OVERRIDE_PAYDAY_CHECKS=yes في ملف local.env لتعطيل شيكات السلامة التي تمنع تشغيل يوم الدفع في الوقت الخطأ.
يتفاعل رمز Python مع قاعدة البيانات عن طريق إرسال استعلامات SQL RAW من خلال مكتبة postgres.py.
وثائق PostgreSQL الرسمية هي صديقك عند التعامل مع SQL ، وخاصة الأقسام "Language SQL" و "SQL Order".
مخطط DB موجود في sql/schema.sql ، ولكن لا تعدل هذا الملف مباشرة ، بدلاً من ذلك ، ضع التغييرات في sql/branch.sql . أثناء النشر ، سيتم تشغيل البرنامج النصي على DB الإنتاج وسيتم دمج التغييرات في sql/schema.sql . هذه العملية شبه آلية عن طريق release.sh .
بالنسبة إلى أنماطنا ، نستخدم Sass و Bootstrap 3. أوراق الأنماط في style/ الدليل ورمز JavaScript الخاص بنا في js/ . إن سياستنا لكليهما هي تضمين أقل ما يمكن أن يكون موقع الويب قابلاً للاستخدام بالكامل تقريبًا بدون JS ، ويجب على CSS الاستفادة من Bootstrap قدر الإمكان بدلاً من احتواء الكثير من القواعد المخصصة التي ستصبح عبئًا على الحفاظ عليها.
نقوم بتجميع bootstrap أنفسنا من مصدر SASS style/bootstrap/ الدليل. نحن نفعل ذلك لتكون قادرة على تخصيصه بسهولة عن طريق تغيير القيم في style/variables.scss . تعديل الملفات في style/bootstrap/ ربما يكون فكرة سيئة.
بالنسبة لأيقونات واجهة المستخدم ، نستخدم أيقونات bootstrap. يمكن تضمين أيقونة في صفحة عن طريق الاتصال icon الأيقونة من templates/macros/icons.html {{ icon('liberapay') }} يتم تخزين الرموز في ملف www/assets/icons.svg . لإضافة أيقونة جديدة في هذا الملف ، يجب تحويل عنصر الجذر <svg> من الرمز الذي يتم إضافته إلى عنصر <symbol> ، مع الحفاظ على سمة viewBox فقط وإضافة سمة id .
إذا لم تجد أي أيقونة في أيقونات Bootstrap التي تناسب حالة الاستخدام الخاصة بك ، فيمكنك محاولة البحث في كتالوجات عبر الإنترنت مثل Flaticon و Icons8 و Pictaricers و SVG repo ومشروع الاسم. بالنسبة لأيقونات العلامة التجارية ، فإن الرموز البسيطة هي مورد جيد.
أسهل طريقة لتشغيل جناح الاختبار هي:
make test
هذا يعيد إنشاء مخطط اختبار DB ويدير جميع الاختبارات. لتسريع الأمور ، يمكنك أيضًا استخدام الأوامر التالية:
make pytest يدير اختبارات Python فقط دون إعادة إنشاء اختبار DBmake pytest-re يدير الاختبارات التي فشلت من قبل تشمل بعض اختباراتنا التفاعلات مع الخدمات الخارجية. من أجل تسريع تلك الاختبارات ، نقوم بتسجيل الطلبات والاستجابات تلقائيًا باستخدام VCR. السجلات موجودة في دليل tests/py/fixtures ، واحدة لكل فئة اختبار.
إذا قمت بإضافة أو تعديل التفاعلات مع الخدمات الخارجية ، فسوف تفشل الاختبارات ، لأن VCR لن تجد الطلب الجديد أو المعدل في السجلات ، وسوف يرفض تسجيل الطلب الجديد افتراضيًا (انظر أوضاع السجل لمزيد من المعلومات). عند حدوث ذلك ، يمكنك إما إضافة VCR=new_episodes إلى أمر الاختبار الخاص بك (على سبيل المثال ، make pytest VCR=new_episodes ) أو حذف ملفات التثبيت القديمة (على سبيل المثال rm tests/py/fixtures/TestPayinsStripe.yml ).
إذا كنت تختبر واجهة برمجة التطبيقات التي تستخدم مفاتيح Idempotency (على سبيل المثال API's Stripe) ، فسوف تفشل بعض الطلبات إذا لم تعد متطابقة تمامًا. في هذه الحالة ، قم بزيادة قيمة سمة offset فئة الاختبار بحيث يتم استخدام مفاتيح التعريف المختلفة.
تم تصميم PostgreSQL لمنع فقدان البيانات ، لذلك فهي تقوم بالكثير من القرص المتزامن بشكل افتراضي. لتقليل عدد محظورات الحظر ، يقوم برنامج recreate-schema.sh تلقائيًا بتبديل خيار synchronous_commit إلى off قاعدة بيانات الاختبار ، ومع ذلك لا يعط هذا المزامنة تمامًا. إذا كان مثيل postgresql الخاص بك يحتوي فقط على بيانات يمكنك تحمل خسارتها ، فيمكنك تسريع الأمور بشكل أكبر عن طريق إعداد fsync إلى off ، wal_level إلى minimal و max_wal_senders إلى 0 في ملف تكوين الخادم ( postgresql.conf ).
يدعم Liberapay حاليًا معالجتين للدفع: Stripe و PayPal.
يمكنك إعادة توجيه عمليات الاسترداد الخاصة بـ Stripe إلى مثال Liberapay المحلي عن طريق تشغيل make stripe-bridge . يجب تثبيت برنامج Cli Stripe لهذا العمل.
يجب مراجعة جميع التبعيات الجديدة للتحقق من أنها لا تحتوي على رمز ضار أو ثغرات الأمن.
نستخدم وضع فحص تجزئة PIP لحماية أنفسنا من العبث التبعية. وبالتالي ، عند إضافة أو ترقية التبعية ، يجب حساب التجزئة الجديدة ووضعها في ملف المتطلبات. لذلك يمكنك استخدام Hashin:
pip install hashin
hashin package==x.y -r requirements_base.txt
إذا كنت بحاجة لسبب ما إلى إعادة صياغة جميع المتطلبات ، فاحرص make rehash-requirements .
لترقية جميع التبعيات في ملف المتطلبات ، قم بتشغيل hashin -u -r requirements_base.txt . قد تضطر إلى تشغيل أوامر hashin إضافية إذا كانت الاعتماد الفرعي الجديد مفقودًا.
لا تتبع تبعيات الاختبار في requirements_tests.txt هذه القواعد لأنها غير مثبتة في الإنتاج. الأمر متروك لك لعزل بيئة التطوير الخاصة بك عن بقية نظامك من أجل حمايته من نقاط الضعف المحتملة في تبعيات الاختبار.
عند كتابة الكود الذي يتولى المعلومات الشخصية ، ضع في اعتبارك المبادئ المنصوص عليها في الناتج المحلي الإجمالي.
ملاحظة: لا يمكن استضافة Liberapay ذاتيًا ، فإن هذا القسم يهدف فقط إلى توثيق كيفية نشر إصدارات جديدة.
يتم استضافة Liberapay حاليًا على AWS (أيرلندا).
لنشر التطبيق ببساطة تشغيل release.sh ، سوف يرشدك من خلاله. بالطبع يجب أن تُمنح الوصول أولاً.
CC0 تفاني المجال العام (انظر هذا المناقشة للحصول على التفاصيل.)