跳到内容

软骨/砂芯

存储库文件导航

砂砾

Grist是一个现代关系型电子表格。它结合了电子表格的灵活性和数据库的健壮性。

  • 砂芯(本回购)具备运行强大的电子表格托管服务器所需的功能。
  • 砂粒电子是一个Linux/macOS/Windows桌面应用程序,用于查看和编辑本地存储的电子表格。
  • 静态砂粒是Grist的完全浏览器内版本,用于在网站上显示电子表格,无需后端支持。

这个灰色岩心回购是Grist的核心,包括Grist提供的托管服务Grist实验室,一家总部位于纽约的公司🇺🇸 和Grist的主要开发人员。法国政府机构ANCT Données et Territoires公司🇫🇷 对代码库也做出了重大贡献。

这个砂芯,砂粒电子、和静态砂粒存储库都是开源的(Apache许可证,2.0版)。

问题?反馈?想与Grist分享您正在构建的内容吗?加入我们的官方Discord服务器或访问我们的社区论坛.

砂砾.mp4

特征

Grist是一个混合数据库/电子表格,这意味着:

  • 列的工作方式与它们在数据库中的工作方式类似:它们被命名,并且保存一种数据。
  • 列可以由公式、电子表格样式填充,并在引用的单元格更改时自动更新。

这种差异可能会使直接来自Excel或谷歌表的人感到困惑。给它一个机会!还有一个Grist for Spreadsheet用户文章来帮助你定位。如果你来自Airtable,你会发现这个模型很熟悉(还有我们的砂砾vs气垫文章进行直接比较)。

以下是Grist的一些特定功能亮点:

  • Python公式。
  • 一种可移植的、自包含的格式。
    • 基于部署最广泛的数据库引擎SQLite。
    • 任何可以读取SQLite的工具都可以从Grist文件中读取数字和文本数据。
    • 使能够备份您可以放心地完全恢复。
    • 非常适合在不同主机之间移动。
  • 可以在静态网站上显示静态砂粒–无需特殊服务器。
  • 用于本地查看和编辑的独立桌面应用程序:砂粒电子.
  • 方便的编辑和格式化功能。
    • 选择和选项列表,用于向记录添加彩色标签。
    • 工具书类和引用列表,用于交叉引用其他表中的记录。
    • 附件,将媒体或文档文件包含在记录中。
    • 日期和时间、切换和货币等特殊数字都有专门的编辑器和格式选项。
    • 条件格式,使您可以使用公式控制单元格的样式,以引起人们对重要信息的注意。
  • 拖放式仪表板。
    • 图表,卡片视图和a日历小部件用于可视化。
    • 摘要表用于跨组求和和计数。
    • 小工具链接简化筛选和编辑数据。Grist有一种独特的可视化方法,您可以将不同的小部件布局并链接在一起显示,不用把混合材料塞进桌子里。
    • 滤棒用于快速切片和切丁。
  • 增量导入.
    • 从您的银行导入过去三个月活动的CSV。。。
    • …并在一个月后导入新活动,无需大惊小怪或重复。
  • 集成。
  • 许多模板首先,从投资研究到组织寻宝活动。
  • 访问控制选项。
  • 自我维护。
    • 适用于内部网操作和特定的合规性要求。
  • 不受信任文档的沙盒选项。
    • 在Linux或使用Docker时,您可以启用g遮阳板在单个文档级别进行沙盒处理。
    • 在macOS上,您可以使用本机沙箱。
    • 在任何操作系统(包括Windows)上,都可以使用基于wasm的沙箱。
  • 翻译成多种语言。
  • F1key提供了一些快速帮助。这过去是不言而喻的,但总的来说,Grist有很好的键盘支持。
  • 我们将进度发布在𝕏 或者推特什么的并发布每月通讯.

如果您对Grist的去向感到好奇,请参阅我们的路线图,插入一个问题我们的论坛,或浏览我们的大量文档.

使用Grist

如果您只想快速演示一下Grist:

得到灰色岩心在您的计算机上运行码头工人,执行:

码头工人拉动软骨docker运行-p 8484:8484-it gristlabs/grist

然后访问http://localhost:8484在浏览器中。您可以创建、编辑、导入、,和导出文档。要跨驳接器运行保留您的工作,请将目录共享为/坚持:

docker运行-p 8484:8484-v$PWD(美元)/persistent:/presisten-it gristlabs/grist

在获取模板模板.getgrist.com工资单,库存管理、开票、D&D遭遇跟踪等更多,或使用您在其上创建的任何文档docs.getgrist.com网站.

如果需要更改Grist运行的端口,请设置港口变量,不要只更改端口映射:

docker运行--env PORT=9999-p 9999:9999-v$PWD/persist:/persist-it gristlabs/grist

要启用gVisor沙盒,请设置--env GRIST_SANDBOX_FLAVOR=护目镜.这应该适用于默认驳接器设置,但可能不适用于所有设置环境。

您可以找到更多有关配置Grist、设置身份验证、,并在我们的公共服务器上运行自我管理砂砾手册。

激活引导页面以诊断问题

您可以打开一个特殊的“引导页面”来检查安装。只需访问/行李箱有关说明,请访问Grist服务器。因为即使在身份验证时也可以使用引导页面未设置,您可以通过设置给它一个特殊的访问密钥GRIST_BOOT_键.

docker运行-p 8484:8484-e GRIST_BOOT_KEY=secret-it gristlabs/GRIST

启动页面应可在/引导/<GRIST_boot_KEY>.我们是开始收集常见问题的探针。如果你遇到一个问题未涵盖,如果您可以在中为其添加一个探针,那就太好了BootProbe(引导探测器).或者提交一个问题,以便其他人可以添加,我们才刚刚开始。

从源头构建

要从源代码构建Grist,请执行以下步骤:

纱线安装纱线运行构建:prod纱线运行安装:python纱线起动#Grist将在本地主机:8484/

文档中的Grist公式将使用直接在您的机器。您可以使用GRIST_SANDBOX_FLAVOR格栅环境变量。

  • 在macOS上,导出GRIST_SANDBOX_FLAVOR=macSandboxExec使用本机沙盒执行器沙盒命令。
  • 在Linux上gVisor跑步记录安装,导出GRIST_SANDBOX_FLAVOR=gvisor是一个选项。
  • 在包括Windows在内的任何操作系统上,export GRIST_SANDBOX_FLAVOR=密码可用。

这些沙箱方法是为我们在Grist实验室和可能需要调整才能在您自己的环境中工作-拉请求非常欢迎来到这里!

登录名

与git一样,Grist也具有跟踪文档修订历史的功能。因此,为了全面运营,Grist希望知道修改文档的用户是谁。在知道之前,它会进行操作以有限的匿名模式。为了让您继续,docker映像配置为当您单击“登录”按钮时,Grist会将您的工作归因于你@example.com.通过设置更改此设置GRIST_DEFAULT_邮件:

docker运行--env GRIST_DEFAULT_EMAIL=我的@电子邮件-p 8484:8484-v$PWD/persist:/persist-it gristlabs/grist

您可以在中更改您的姓名配置文件设置在里面这个用户菜单.

对于多用户操作,或者如果您希望通过公共互联网,您需要将其连接到您自己的Single Sign-On服务。有很多方法可以做到这一点,包括SAML和转发身份验证.砂砾已经过测试Authentik公司,授权0,和Google/Microsoft登录,通过德克斯.

翻译

我们使用网页版管理翻译。感谢所有参与其中的人。特别感谢ANCT开发人员做了大量的工作,使应用程序可以本地化。谢谢你!

翻译状态

为什么选择免费开源软件

此存储库,砂芯由Grist Labs维护。我们的旗舰产品位于getgrist.com网站是根据您在这里看到的代码构建的,结合了特定于业务的软件,该软件设计用于扩展到多个用户,处理帐单等。

Grist Labs是一家开放式公司。我们提供Grist托管服务,并提供免费和付费计划。我们还使用专有许可证开发和销售与Grist相关的功能,以满足拥有大型自主安装的企业的需求。

我们将数据可移植性和自主性视为一项关键价值砂芯是其中的一个重要部分。我们致力于维护和改进砂芯代码库,并考虑专有产品如何影响数据可移植性和自治性。

通过打开源代码并提供OSI公司-经批准的免费许可证,Grist使其用户受益:

  • 开发人员社区。检查源代码、修复错误和开发的自由对于像电子表格这样的通用产品来说,新功能是一件大事,因为它有对某个地方的某人至关重要的长尾特征。
  • 增加信任。因为任何人都可以检查源代码,所以“模糊安全”不是一个选项。代码中的漏洞可以被其他人发现,并在其导致之前报告损坏。
  • 独立性。无论Grist Labs的业务前景如何,您都可以使用Grist,因为它是开源的,可以自托管。使用我们的托管解决方案很方便,但您未锁定。
  • 价格灵活性。如果你资金不足但有时间投资,那么自我托管是一个不错的选择选项。DIY用户可能有技术悟性和动机去钻研和改进,这可以使Grist的所有用户受益。
  • 可扩展性。对于开发人员来说,开源使构建扩展(例如提升自订控件). 您可以更轻松地将Grist包括在您的管道中。如果缺少某个功能,您可以只使用源代码并在其基础上进行构建。

有关Grist实验室历史和原则的更多信息,请参阅我们的关于我们第页。

赞助商

评论

环境变量

砂砾可以通过多种方式进行配置。以下是其敏感的主要环境变量:

变量 目的
允许_WEBHOOK_DOMAINS webhooks中允许使用的域的逗号分隔列表(例如webhook.site、zapier.com)。您可以将此设置为*要允许所有域,但如果这样做,我们建议使用小心锁定的代理(请参阅GRIST_HTTPS_代理)如果你不完全信任用户。否则,您内部网络上的服务可能容易受到操纵。
应用程序DOC_URL 文档工作者url,在启动单个文档工作者时设置(其他服务器将通过redis查找文档工作者urls)
应用程序DOC_INTERNAL_URL 喜欢应用程序文档URL但由主服务器使用内部域名解析来访问服务器(就像在docker环境中一样)。只有在doc-worker中定义此值才有意义。默认为应用程序文档URL.
应用程序主页URL 家庭api的url前缀(家庭和文档服务器需要此前缀)
应用程序主页内部URL 喜欢应用程序主页URL但家庭和文档服务器使用内部域名解析来联系任何家庭工作者(就像在docker环境中一样)。默认为应用程序主页URL
应用_状态_ URL 静态资源的url前缀
APP_STATIC_INCLUDE_CUSTOM_CSS应用程序 设置为“true”以在静态页面中包含custom.css(来自APP_STATIC_URL)
应用程序_不可信_URL 提供/期望插件内容的URL。
灰色自适应域 设置为“true”以支持多个基本域(小心,主机标头应该是可信的)
GRIST_APP_ROOT公司 包含Grist沙盒和资产的目录(特别是沙盒和静态子目录)。
GRIST_BACKUP_DELAY_SECS公司 在文档更改后等待这么长时间,然后再进行备份
GRIST_BOOT_键 如果设置了,请在/boot/GRIST_boot_KEY上提供诊断
GRIST_DATA_DIR公司 存储文档的目录。默认为文档/相对于Grist应用程序目录。在Grist的默认Docker映像中,其默认值为/persist/docs,因此它将用作装入的卷。
GRIST_DEFAULT_邮件 如果已设置,则在没有其他凭据时以该用户身份登录
GRIST_DEFAULT_产品 如果设置,此控件将启用新站点的功能和限制。请参阅Product.ts中的产品名称。
网格_默认_位置 当Grist无法使用浏览器区域设置时,要用作后备的区域设置。
GRIST_DOMAIN公司 在托管Grist中,Grist由该域的子域提供服务。默认为“getgrist.com”。
灰色实验插件 启用实验插件
GRIST_ENABLE_REQUEST_功能 启用REQUEST(请求)功能。此函数执行HTTP请求的方式与请求.request。此函数存在严重的安全风险,因为它可以让用户在Grist公开可用时调用内部端点。此功能还可能导致性能问题。默认情况下取消设置。
GRIST_HIDE_UI_元素 要禁用的UI功能的逗号分隔列表。允许的零件名称:帮助中心,账单,模板,createSite,multiSite,multiAccounts,sendToDrive,教程,supportGrist。如果零件也存在于GRIST_UI_FEATURES中,它仍将被禁用。
GRIST_HOST公司 侦听端口时要使用的主机名。
GRIST_HTTPS_代理 如果已设置,请使用此代理进行webhook有效负载传递。
网格_ID_PREFIX 对于形式o的子域-,期望或生成o-${GRIST_ID_PREFIX}.
网格_导航_会话 如果设置,Grist将不使用会话进行身份验证。
GRIST_INCLUDE_CUSTOM_SCRIPT_URL公司 如果设置,将在<脚本>在所有应用程序页面上标记。
GRIST_INST_DIR公司 Grist服务器的Grist实例配置文件的路径。
GRIST_LIST_PUBLIC_SITES公司 如果设置为true,将为匿名用户列出与公众共享的网站。默认为false。
GRIST_管理_工人 如果设置了,Grist可以假设,如果针对文档工作者的url返回404,那么该工作者就消失了
网格_最大_加载_附件_MB 附件的最大允许大小(0或为空表示无限制)。
GRIST_MAX_UPLOAD_IMPORT_MB格式 导入的最大允许大小(.grist文件除外)(0或为空表示无限制)。
GRIST_OFFER_ALL_LANGUAGES公司 如果设置了,则向用户提供所有翻译的语言(默认情况下,仅向用户提供具有特殊“足够好”密钥集的语言)。
GRIST_ORG_IN_PATH系统 如果为true,则将组织编码为路径,而不是域
GRIST_PAGE_TITLE_SUFFIX系统 要附加到<标题>在HTML文档中。默认为“-砂砾”。设置为_空白根本没有后缀。
GRIST_PROXY_AUTH_标题 已弃用,并解释为GRIST_FORWARD_AUTH_HEADER的同义词。
网格_外部_ URL api的可选url,该api允许向负载平衡器(un)注册服务器
GRIST_SERVE_SAME_ORGIN公司 设置为“true”以在与顶级页面相同的协议主机端口上访问主服务器和文档工作者,与自定义域相同(小心,主机头应该是可信的)
GRIST_服务器 要设置的服务器类型。逗号分隔的值,可以包含“home”、“docs”、“static”和/或“app”。默认为“home、docs、static”。
GRIST_SESSION_COOKIE公司 如果已设置,则覆盖Grist的cookie的名称
GRIST_SESSION_DOMAIN公司 如果设置,则将cookie与给定域关联,否则默认为GRIST_domain
GRIST_SESSION_SECRET网格 用于对会话进行编码的密钥
GRIST_SKIP_BUNDLED_小工具 如果设置,Grist将忽略通过NPM包包含的任何捆绑小部件。
GRIST_无_铺设 设置为“false”时,拒绝匿名用户访问主页
GRIST_FORCE_LOGIN公司 与GRIST_ANON_PLAYGROUND很相似,但根本不支持匿名访问(公开共享文档等功能需要身份验证)
GRIST_SINGLE_ORG公司 设置为组织“域”以将客户端固定到该组织
GRIST_模板_ORG 设置为组织“域”以显示该组织的公共文档
网格_帮助_中心 设置帮助中心链接参考
GRIST_TERMS_OF_SERVICE_URL公司 如果设置,则添加服务条款链接
免费辅导电话 设置指向人工帮助的链接(例如:电子邮件地址或会议安排工具)
GRIST_CONTACT_SUPPORT_URL公司 在错误页面上设置联系支持的链接(例如:电子邮件地址或在线表单)
GRIST_SUPPORT_ANON公司 如果设置为“true”,则显示匿名访问的UI(默认情况下不显示)
灰色_支持_邮件 如果设置了,则为用户提供指定的电子邮件支持权限。主要的额外功能是能够以列出的方式与所有用户共享站点、工作区和文档。
网格_高程_标高 遥测水平。可以设置为:远离的(默认),有限的,或满的.
网格处理器_THROTTLE_CPU 如果设置,则启用CPU调节
GRIST_TRUST_PLUGINS公司 如果设置了,插件将与Grist应用程序的其余部分来自同一主机,而不是来自不同的主机。通常,插件由不同的主机提供,因此Grist应用程序使用的cookie不会自动提供给它们。只有在您了解安全含义时才启用此选项。
灰色用户根 在中查找插件的额外路径-Grist将在中扫描插件$GRIST_USER_ROOT/插件.
GRIST_UI_特征 要启用的UI功能的逗号分隔列表。允许的零件名称:帮助中心,账单,模板,createSite,multiSite,multiAccounts,sendToDrive,教程,supportGrist。如果零件也存在于GRIST_HIDE_UI_ELEMENTS中,则不会启用该零件。
GRIST_不信任_端口 如果设置,插件将从给定端口提供服务。这是设置APP_UNTRUSTED_URL的替代方法。
GRIST_WIDGET_LIST_URL公司 默认情况下,指向小部件清单的urlhttps://github.com/gristlabs/grist-widget/releases/download/latest/manifest.json已使用
COOKIE_MAX_AGE公司 会话cookie最长使用期限,默认为90天;可以设置为“无”以使其成为会话cookie
主页_端口 REST API服务器要侦听的端口号;如果设置为“share”,则将API端点添加到常规grist端口。
港口 Grist服务器要侦听的端口号
红色_ URL 用于浏览器会话和数据库查询缓存的可选redis服务器
GRIST_SKIP_REDIS_CHECKSUM_MISMATCH 实验性。如果已设置,则仅当Redis中的校验和与S3后端存储中的校验值不同时发出警告。如果后端存储实现写入后读取一致性。默认为false。
GRIST_SNAPSHOT_TIME_CAP公司 可选。定义跟踪桶的封口。用法:{“小时”:25,“天”:32,“isoWeek”:12,“月”:96,“年”:1000}
网格_快照_保持 可选。要为文档无条件保留的最近快照数,无论何时创建
GRIST_PROMCLIENT_PORT公司 可选。如果已设置,请在指定端口号上提供普罗米修斯度量。⚠️确保使用未公开的端口⚠️.

AI Formula Assistant相关变量(所有可选):

变量 目的
助理_API_钥匙 可选。向外部AI会话端点发出请求时要传递的API密钥。
助理_ CHAT_COMPLETION_ENDPOINT 可选。要调用的聊天完成式端点。如果使用OpenAI,则不需要。
助理_模型 可选。如果设置,则在调用AI会话端点时传递此字符串。
助理_朗格_上下文_模型 可选。如果设置,则将使用此模型集重试由于上下文长度限制而失败的请求。
OPENAI_API_键 可选。ASSISTANT_API_KEY的同义词,假定正在使用OpenAI端点。在OpenAI上注册帐户,然后生成密钥在这里.

在撰写本文时,已知AI Assistant可以针对gpt-3.5-turbo和gpt-4的OpenAI聊天完成端点运行。它还可以针对提供的聊天完成端点运行美洲驼-赛珍珠.

沙盒相关变量:

变量 目的
GRIST_SANDBOX_FLAVOR格栅 可以是gvisor、pynbox、unsandboxed、docker或macSandboxExec。如果设置,则强制Grist使用指定类型的沙盒。
网格_沙盒 要作为沙盒运行的程序或图像名称。有关书呆子的详细信息,请参阅NSandbox.ts。
巨蟒_版本 可以是2或3。如果设置,则假定没有引擎设置的文档使用指定版本的python。并非所有沙盒都支持所有版本。
蟒蛇版本创建 可以是2或3。如果设置,则新创建的文档的引擎设置为python2或python3。并非所有的沙盒都支持所有版本。

转发身份验证变量:

变量 目的
GRIST_FORWARD_AUTH_HEADER公司 如果已设置,请信任指定的标头(例如“x-forwarded-user”)以包含授权用户电子邮件,并启用“转发身份验证”登录。
GRIST_FORWARD_AUTH_LOGIN_PATH公司 如果设置了GRIST_FORWARD_AUTH_HEADER,则GRIST将在此路径侦听登录。默认为/身份验证/登录.
GRIST_FORWARD_AUTH_LOGOUT_PATH公司 如果设置了GRIST_FORWARD_AUTH_HEADER,则当用户注销时,GRIST将转发到此路径。

正向身份验证支持两种模式,区别在于网格_导航_会话:

  1. 使用会话,并在登录端点上进行转发验证。

    例如,使用traefik反向代理traefik前向授权中间件:

    • 网格_导航_会话:不要设置,或设置为错误的值。
    • 确保反向代理将前向身份验证中间件应用于GRIST_FORWARD_AUTH_LOGIN_PATH公司GRIST_FORWARD_AUTH_LOGOUT_PATH公司.
    • 如果要在某些情况下允许匿名访问,请确保所有其他路径都没有前向认证中间件。砂砾将根据需要通过重定向到触发GRIST_FORWARD_AUTH_LOGIN_PATH公司。用户登录后,Grist将使用会话在注销之前识别用户。
  2. 没有会话,并且在所有端点上都进行了转发身份验证。

    例如,使用HTTP Basic Auth和服务器配置来设置标头(在GRIST_FORWARD_AUTH_HEADER公司)登录用户。

  • 网格_导航_会话:设置为真的。将不使用网格会话。
  • 确保反向代理为所有可能需要的请求设置指定的头登录信息。用户不能伪造此标头,因为格里斯特会相信里面的一切。

使用正向身份验证时,您可能还希望设置以下变量:

  • GRIST_FORCE_LOGIN=真禁用匿名访问。

插件:

Grist有一个插件系统,内部使用。你能做的一件有用的事这样做的目的是在Grist的构建中包含自定义小部件。自定义小部件通常只需设置GRIST_WIDGET_LIST_URL公司,但这也有外部依赖性的缺点不适合脱机使用或存档。插件提供了一种替代方案。

要将自定义小部件“捆绑”为插件,请执行以下操作:

  • 添加的子目录插件,例如。插件/my-widgets.或者,您可以设置GRIST_USER_ROOT公司环境变量设置为所需的任意路径,然后创建插件/my-widgets在这个范围内。
  • 添加清单.yml该子目录中的文件,如下所示这个:
name:我的小工具组件:小部件:widgets.json
  • 这个小部件.json文件的格式应为这个粗砂小工具存储库,并应放置在与清单.yml.任何材料插件/my-widgets将由Grist提供服务,并且可以在小部件.json.
  • 所有文件就绪后,重新启动Grist。你的小部件应该现在可以在自定义小部件下拉列表中使用,以及其他来自GRIST_WIDGET_LIST_URL公司.
  • 如果您愿意,可以添加多个插件子目录多组小部件,它们都将可用。

Google Drive集成:

变量 目的
谷歌_客户ID 设置为要与Google API客户端一起使用的Google客户端Id
GOOGLE_CLIENT_SECRET公司 设置为要与Google API客户端一起使用的Google客户端密码
GOOGLE_API_钥匙 设置为要与Google API客户端一起使用的Google API密钥(访问公共文件)
GOOGLE_DRIVE_SCOPE公司 设置为Google Drive集成请求的范围(默认为Drive.file)

数据库变量:

变量 目的
类型RM_数据库 sqlite的数据库文件名或其他数据库类型的数据库名称
类型或主机 数据库主机
类型_记录 设置为“true”以查看所有sql查询
键入密码 要使用的密码
类型_端口 数据库的端口号,如果不是该数据库类型的默认端口号
类型RM_TYPE 设置为“sqlite”或“postgres”
类型RM_用户名 要连接的用户名
类型_外部 要以JSON格式传递给TypeORM的任何其他属性

测试:

变量 目的
GRIST_测试_插槽 仅在测试期间用于通道外通信的套接字。
GRIST_TEST_HTTPS偏移 如果设置,则在指定的偏移量处添加https端口。这在测试中很有用。
GRIST_TEST_SSL_CERT公司 如果设置,则包含SSL证书的文件名。
GRIST_TEST_SSL_键 如果已设置,则包含SSL私钥的文件名。
网格_测试_登录 允许假冒未经身份验证的测试登录(仅适用于开发环境)。
灰色_测试_外部 如果设置了,则主服务器将在/test/router上提供模拟版本的路由器api
GREP_测试 用于选择要运行的特定测试的模式(例如。env GREP_TESTS=ActionLog纱线测试).

测试

打开请购单时,测试将作为CI的一部分自动运行。然而,在本地运行测试可能很有帮助将更改推送到GitHub之前。首先,您需要确保已安装所有依赖项:

纱线安装纱线安装:python

然后,您可以这样运行主测试套件:

纱线测试

Python测试也可以在本地运行。(注意:当前需要Python 3.9-3.11。)

纱线测试:python

对于运行特定测试,可以使用GREP_测试变量:

env GREP_TESTS=ChoiceList纱线测试env GREP_TESTS=纱线测试摘要:python

许可证

此存储库,砂芯,根据Apache许可证,2.0版,这是一个OSI公司-批准的自由软件许可证。有关更多信息,请参阅LICENSE.txt和NOTICE.txt。