Liberapay是一个经常出现的捐赠平台。我们帮助您为您欣赏的创作者和项目提供资金。
注意:此WebApp无法自我主持。
想聊天吗?加入我们的吉特。
另外,您可以在我们的Github沙龙中发布消息。
您可以通过Weblate帮助翻译Liberapay。当前状态:
如果您对翻译Liberapay有疑问,可以在沙龙中询问他们。
Liberapay最初是从Gratipay分配的,并继承了其Web Micro-Framework Pando( NéAspen ),该Web基于文件系统路由和简化。不用担心,这很简单。例如,要使LiberApay返回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代码仅用于特定于请求的逻辑,共同的后端代码在liberapay/ Directory中。
确保首先安装了以下依赖关系:
然后运行:
make env
现在,您需要给自己超级用户Postgres权力(如果还没有完成),并创建两个数据库:
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
要将管理员权限授予帐户,请这样修改数据库:
psql liberapay -c "update participants set privileges = 1 where username = 'account-username'"
要运行本地发薪日http:// localhost:8339/admin/payday,然后单击“运行发薪日”按钮。您可以在local.env文件中添加OVERRIDE_PAYDAY_CHECKS=yes ,以禁用安全检查,以防止在错误的时间运行发薪日。
Python代码通过通过Postgres.py库发送RAW SQL查询来与数据库进行交互。
与SQL打交道时,官方的PostgreSQL文档是您的朋友,尤其是“ SQL语言”和“ SQL命令”部分。
DB架构在sql/schema.sql中,但不要直接修改该文件,而是将更改放在sql/branch.sql中。在部署过程中,脚本将在生产DB上运行,更改将合并到sql/schema.sql中。该过程通过release.sh半自动化。
对于我们的样式,我们使用SASS和Bootstrap3。样式表处于style/目录,我们的JavaScript代码在js/中。我们对两者的政策都应尽可能少地包括在内:网站几乎应该在没有JS的情况下完全可用,并且我们的CSS应尽可能多地利用Bootstrap,而不是包含许多将成为维护负担的自定义规则。
我们从style/bootstrap/ Directory中的Sass源中编译自动程序。我们这样做是为了能够通过更改style/variables.scss中的值来轻松自定义它。修改style/bootstrap/的文件可能是一个坏主意。
对于用户界面图标,我们使用bootstrap图标。可以通过从templates/macros/icons.html调用icon宏来包含图标,例如{{ icon('liberapay') }} 。图标存储在www/assets/icons.svg文件中。要在该文件中添加新图标,必须将添加的图标的root <svg>元素转换为<symbol>元素,仅保留其viewBox属性并添加id属性。
如果您在Bootstrap图标中找不到任何适合您用例的图标,则可以尝试搜索Flaticon,Icons8,Putragrammers,Svg Repo和Noun项目等在线目录。对于品牌图标,简单图标是一个很好的资源。
运行测试套件的最简单方法是:
make test
这重新制作了测试数据库的模式并运行所有测试。为了加快事项,您还可以使用以下命令:
make pytest仅在不重新创建测试DB的情况下进行Python测试make pytest-re仅运行以前失败的测试我们的一些测试包括与外部服务的互动。为了加快这些测试,我们使用VCR自动记录请求和响应。记录在tests/py/fixtures目录中,每个测试类别为一个。
如果添加或修改与外部服务的交互,则测试将失败,因为VCR不会在记录中找到新的或修改的请求,并且默认情况下会拒绝记录新请求(有关更多信息,请参见记录模式)。发生这种情况时,您可以将VCR=new_episodes添加到测试命令(例如make pytest VCR=new_episodes )或删除过时的固定文件文件(例如rm tests/py/fixtures/TestPayinsStripe.yml )。
如果您正在测试使用IDEMPOTENCY键(例如Stripe的API)的API,则如果不再完全相同,则某些请求将失败。在这种情况下,增加测试类offset属性的值,以便将使用不同的IDEMPOTENCY键。
PostgreSQL旨在防止数据丢失,因此默认情况下它会执行许多同步磁盘。为了减少这些阻止写入的数量,我们的recreate-schema.sh脚本会自动切换synchronous_commit选项以off测试数据库,但是这并不能完全禁用同步。如果您的PostgreSQL实例仅包含0可以负担得起的数据,那么您可以通过将fsync设置为off , wal_level , minimal to max_wal_senders在服务器的配置文件( postgresql.conf )中进一步加速问题。
Liberapay目前支持两个付款处理器:Stripe和PayPal。
您可以通过运行make stripe-bridge将Stripe的回调转发到本地Liberapay实例。必须安装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命令。
requirements_tests.txt中的测试依赖项不遵循这些规则,因为它们未安装在生产中。由您决定将开发环境与系统的其余部分隔离,以保护其免受测试依赖性中可能的漏洞。
在编写处理个人信息的代码时,请记住GDPR中所述的原则。
注意:Liberapay不能自我托管,本节仅旨在记录我们如何部署新版本。
Liberapay目前由AWS(爱尔兰)主持。
要部署该应用程序,只需运行release.sh ,它将指导您完成它。当然,您需要先获得访问权限。
CC0公共领域奉献(有关详细信息,请参见此讨论。)