Liberapay เป็นแพลตฟอร์มการบริจาคซ้ำ เราช่วยคุณให้ทุนแก่ผู้สร้างและโครงการที่คุณชื่นชม
หมายเหตุ: WebApp นี้ไม่เป็นที่ยอมรับตนเอง
ต้องการแชท? เข้าร่วมกับเราใน Gitter
หรือคุณสามารถโพสต์ข้อความในร้านเสริมสวย GitHub ของเรา
คุณสามารถช่วยแปล Liberapay ผ่าน WebBlate สถานะปัจจุบัน:
หากคุณมีคำถามเกี่ยวกับการแปล Liberapay คุณสามารถถามพวกเขาในร้านเสริมสวย
Liberapay เดิมถูกแยกออกจาก Gratipay และสืบทอด Web Micro-Framework Pando ( né Aspen) ซึ่งขึ้นอยู่กับการกำหนดเส้นทางระบบไฟล์และง่ายขึ้น ไม่ต้องกังวลมันค่อนข้างง่าย ตัวอย่างเช่นในการทำให้ Liberapay ส่งคืน Hello $user, your id is $userid Message สำหรับการร้องขอไปยัง 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 ภายใน Simplates มีไว้สำหรับตรรกะเฉพาะคำขอเท่านั้นรหัสแบ็กเอนด์ทั่วไปอยู่ใน 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'"
ในการเรียกใช้ payday ท้องถิ่นเปิด http: // localhost: 8339/admin/payday และคลิกปุ่ม "เรียกใช้ payday" คุณสามารถเพิ่ม OVERRIDE_PAYDAY_CHECKS=yes ในไฟล์ local.env เพื่อปิดการใช้งานการตรวจสอบความปลอดภัยที่ป้องกันการทำงานของวันจ่ายเงินเดือนในเวลาที่ไม่ถูกต้อง
รหัส Python โต้ตอบกับฐานข้อมูลโดยส่งแบบสอบถาม SQL ดิบผ่านไลบรารี postgres.py
เอกสาร PostgreSQL อย่างเป็นทางการคือเพื่อนของคุณเมื่อจัดการกับ SQL โดยเฉพาะอย่างยิ่งส่วน "ภาษา SQL" และ "คำสั่ง SQL"
DB Schema อยู่ใน sql/schema.sql แต่อย่าแก้ไขไฟล์นั้นโดยตรงแทนที่จะใส่การเปลี่ยนแปลงใน sql/branch.sql ในระหว่างการปรับใช้สคริปต์จะทำงานบนฐานข้อมูลการผลิตและการเปลี่ยนแปลงจะถูกรวมเข้ากับ sql/schema.sql กระบวนการนั้นเป็นแบบกึ่งอัตโนมัติโดย release.sh
สำหรับสไตล์ของเราเราใช้ sass และ bootstrap 3. Stylesheets อยู่ใน 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, Pictogrammers, SVG repo และโครงการคำนาม สำหรับไอคอนแบรนด์ไอคอน Simple เป็นทรัพยากรที่ดี
วิธีที่ง่ายที่สุดในการเรียกใช้ชุดทดสอบคือ:
make test
สิ่งนี้สร้างสคีมาของการทดสอบ DB และดำเนินการทดสอบทั้งหมด เพื่อเพิ่มความเร็วในสิ่งที่คุณสามารถใช้คำสั่งต่อไปนี้:
make pytest ดำเนินการทดสอบ Python โดยไม่ต้องสร้าง DB ทดสอบใหม่make pytest-re รันการทดสอบที่ล้มเหลวก่อนหน้านี้เท่านั้น การทดสอบบางส่วนของเรารวมถึงการโต้ตอบกับบริการภายนอก เพื่อเพิ่มความเร็วในการทดสอบเหล่านั้นเราจะบันทึกคำขอและการตอบกลับโดยอัตโนมัติโดยใช้ VCR บันทึกอยู่ในไดเรกทอรี tests/py/fixtures หนึ่งต่อหนึ่งต่อคลาสทดสอบ
หากคุณเพิ่มหรือแก้ไขการโต้ตอบกับบริการภายนอกการทดสอบจะล้มเหลวเนื่องจาก VCR จะไม่พบคำขอใหม่หรือแก้ไขในบันทึกและจะปฏิเสธที่จะบันทึกคำขอใหม่ตามค่าเริ่มต้น (ดูโหมดบันทึกสำหรับข้อมูลเพิ่มเติม) เมื่อสิ่งนั้นเกิดขึ้นคุณสามารถเพิ่ม VCR=new_episodes ลงในคำสั่งทดสอบของคุณ (เช่น make pytest VCR=new_episodes ) หรือลบไฟล์ติดตั้งที่ล้าสมัย (เช่น rm tests/py/fixtures/TestPayinsStripe.yml )
หากคุณกำลังทดสอบ API ซึ่งใช้ปุ่ม idempotency (ตัวอย่างเช่น API ของ Stripe) การร้องขอบางอย่างจะล้มเหลวหากไม่เหมือนกันอีกต่อไป ในกรณีดังกล่าวจะเพิ่มค่าของ offset เซ็ต 'คลาสทดสอบเพื่อให้ใช้คีย์ idempotency ที่แตกต่างกัน
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 ต้องติดตั้งโปรแกรม Stripe-Cli เพื่อให้ทำงานได้
การพึ่งพาใหม่ทั้งหมดจำเป็นต้องได้รับการตรวจสอบเพื่อตรวจสอบว่าไม่มีรหัสที่เป็นอันตรายหรือช่องโหว่ด้านความปลอดภัย
เราใช้โหมดการตรวจสอบแฮชของ PIP เพื่อป้องกันตัวเองจากการดัดแปลงการพึ่งพา ดังนั้นเมื่อเพิ่มหรืออัพเกรดการพึ่งพาการพึ่งพาแฮชใหม่จะต้องคำนวณและใส่ในไฟล์ข้อกำหนด เพื่อที่คุณสามารถใช้ Hashin:
pip install hashin
hashin package==x.y -r requirements_base.txt
หากด้วยเหตุผลบางอย่างที่คุณต้องทำใหม่ข้อกำหนดทั้งหมดให้เรียก make rehash-requirements
หากต้องการอัพเกรดการพึ่งพาทั้งหมดในไฟล์ข้อกำหนดให้เรียกใช้ hashin -u -r requirements_base.txt คุณอาจต้องเรียกใช้คำสั่ง hashin พิเศษหาก subdependencies ใหม่หายไป
การทดสอบการพึ่งพาใน requirements_tests.txt ไม่ปฏิบัติตามกฎเหล่านี้เพราะไม่ได้ติดตั้งในการผลิต มันขึ้นอยู่กับคุณที่จะแยกสภาพแวดล้อมการพัฒนาของคุณออกจากส่วนที่เหลือของระบบของคุณเพื่อปกป้องมันจากช่องโหว่ที่เป็นไปได้ในการทดสอบการพึ่งพา
เมื่อเขียนรหัสที่จัดการข้อมูลส่วนบุคคลโปรดจำไว้ว่าหลักการที่ได้รับการรับรองใน GDPR
หมายเหตุ: Liberapay ไม่สามารถโฮสต์ตัวเองส่วนนี้มีความหมายเฉพาะในการจัดทำเอกสารว่าเราปรับใช้เวอร์ชันใหม่ได้อย่างไร
ปัจจุบัน Liberapay เป็นเจ้าภาพใน AWS (ไอร์แลนด์)
ในการปรับใช้แอปเพียงเรียกใช้ release.sh มันจะแนะนำคุณผ่านมัน แน่นอนคุณต้องได้รับการเข้าถึงก่อน
การอุทิศโดเมนสาธารณะ CC0 (ดูการสนทนานี้เพื่อดูรายละเอียด)