Ohhnews

分类导航

$ cd ..
foojay原文

try.boxlang.io 现已支持全部 BoxLang 版本,并可自由开关 CFML 兼容模式

#boxlang#aws lambda#cfml#无服务器#开发工具

现在,BoxLang 演练场允许你在已发布的 BoxLang 版本中进行选择,并开启或关闭 CFML 兼容性,而无需安装运行时或设置容器。选择版本,输入代码片段,即可在浏览器中运行。

编辑器背后是 AWS Lambda 上的无服务器实现。每种 BoxLang 版本与兼容模式的组合都从同一个仓库构建,并部署为相互隔离的函数。以下是变化内容以及这种安排如何运作。

[LOADING...]

演练场允许你选择运行时版本、切换 CFML 兼容性、分享代码,并直接在浏览器中运行示例。

演练场的新变化

选择 BoxLang 版本

使用版本选择器选择 Latest、Snapshot 或某个已发布的具体版本。Latest 跟随最新发布;固定版本则可让你在重复运行时,对照同一运行时检查行为。

[LOADING...]

版本选择器展示最新构建、快照和具体已发布版本,方便开发者比较运行时行为。

开启或关闭 CFML 兼容性

CFML Compat 开关决定所选环境是否加载 bx-compat-cfml,这是 BoxLang 用于运行兼容 Adobe ColdFusion 和 Lucee 代码的模块。将其关闭,即可单独测试原生 BoxLang。每个可用的运行时版本都具备这两种配置。

[LOADING...]

你可以在启用或禁用 CFML 兼容性的情况下运行同一代码片段,以比较原生 BoxLang 与兼容模式的行为。

为什么版本选择很重要

  • 复现缺陷: 针对较早和较晚版本运行相同代码,以隔离行为变化。
  • 比较发布版本: 无需更改本地安装即可检查新功能。
  • 评估 CFML 迁移: 在启用兼容性的情况下尝试现有 CFML 代码片段,然后探索原生 BoxLang 替代方案。
  • 分享可复现示例: 在报告问题或讲解功能时,清楚说明运行时版本和兼容性选择。

架构:一个仓库,多个 Lambda 环境

演练场不是为每个版本维护单独的服务器,而是构建并部署一组相互隔离的 AWS Lambda 函数矩阵。

BoxLang 运行时CFML 兼容关闭CFML 兼容开启
1.17.6LambdaLambda
1.17.5LambdaLambda
1.17.0LambdaLambda
1.16.0LambdaLambda
其他受支持的发布版本LambdaLambda

每个函数都打包其指定的 BoxLang 版本,并在需要时打包兼容模块。它拥有自己的配置、内存和执行上下文,AWS 会单独对其进行扩缩容。添加一个发布版本意味着扩展构建矩阵,而不是再创建和管理一台服务器。

这种模式不仅适用于演练场:同一个仓库可以为回归测试、API 版本、迁移或特定租户工作负载生成相互隔离的运行时。

AWS Lambda 上的 BoxLang 无服务器

演练场使用 BoxLang AWS Lambda 运行时,开发者也可以在自己的项目中使用它。

编写一个类,部署一个函数

Lambda 应用可以是一个名为 Lambda.bx 的 BoxLang 类,其中包含 run() 方法:

/**
 * My BoxLang Lambda
 */
class {

    function run( event, context, response ){
        response.statusCode = 200
        response.body = {
            "error"    : false,
            "messages" : [],
            "data"     : "Hello from BoxLang on AWS Lambda!"
        }
    }

}

运行时会以 BoxLang 结构体的形式将传入的 JSON 提供在 event 中。context 参数是原生 AWS 上下文对象,可通过 Java 互操作性访问。可选的 response 结构体控制 HTTP 风格响应。

你也可以直接返回数据。字符串、结构体和数组会自动按需序列化:

class {

    function run( event, context, response ){
        return {
            "function"  : context.getFunctionName(),
            "remaining" : context.getRemainingTimeInMillis(),
            "when"      : now(),
            "data"      : [ 1, 2, 3 ].map( n -> n * n )
        }
    }

}

使用运行时的处理程序配置你的函数:

ortus.boxlang.runtime.aws.LambdaRunner::handleRequest

运行时特性

BoxLang Lambda 运行时提供的约定和服务,足以支持不止单函数演示:

  • 请求和响应处理,包括 JSON 序列化和错误处理。
  • 基于约定的 URI 路由:例如 /products 映射到 Products.bx。
  • 通过 x-bx-function 标头选择备用方法。
  • 在热调用之间重用已编译的类。
  • 可通过 BOXLANG_LAMBDA_CONNECTION_POOL_SIZE 配置连接池。
  • 通过 BOXLANG_LAMBDA_DEBUGMODE=true 启用调试指标。
  • 通过 Application.bx 提供应用生命周期钩子。
  • 从 src/resources/boxlang_modules 打包 BoxLang 模块。
  • 日志记录与追踪。

构建、测试与部署

BoxLang AWS Lambda 起始仓库 包含测试、Maven 依赖管理、AWS SAM 集成和 GitHub Actions。其典型工作流如下:

$ bash
# Configure your project
cp workbench/config.env workbench/config.local.env

# Test and build your Lambda zip
./gradlew test
./gradlew build

# Run it locally
./gradlew runLocal
./gradlew runLocalApi

# Deploy to AWS
./workbench/2-deploy.sh

该起始项目包含用于发布构建和快照构建的 CI/CD 工作流。发布工作流可以在推送到 main 时运行,也可以通过手动触发运行;快照工作流则处理非 main 分支和拉取请求。AWS 部署步骤可通过项目工具获得,并可按需启用,包括设置后通过 workbench/2-deploy.sh 和 CloudFormation 进行部署。

为什么使用 BoxLang 构建无服务器应用?

BoxLang 将动态语言语法与 JVM 互操作性相结合。AWS Java 库和 Maven 依赖可与原生语言特性(如闭包和集合成员方法)一起使用。拥有现有 CFML 代码的团队可以使用 bx-compat-cfml 评估无服务器执行,而不必假设完全重写是唯一选择。

Lambda 基于用量的扩缩容也适合带版本的演练场:不常用的组合无需运行在永久预置的服务器上。开发者可以将同样的方法用于内部测试环境或独立扩缩容的 API 变体。

试用并探索源代码

打开 try.boxlang.io,选择版本,更改 CFML Compat 设置,然后运行代码片段。要构建类似项目或自行部署 BoxLang 函数,请从以下资源开始:

如需查看原始公告和更多 Ortus 资源,请参阅 Ortus Solutions 博客上的原始文章。

[LOADING...]
作者

Luis Majano

Ortus Solutions 首席执行官 - 工程师 - 作者 - ColdBox HMVC、BoxLang JVM 语言、ContentBox CMS 等项目的创建者。

相关文章

AI [LOADING...]
[LOADING...]Cristobal Escobar2026年9月17日 231 次浏览

BoxLang 1.17.0 发布:模块自定义加载、CLI 检查器、Jar 加载及更多内容!

AI

AI [LOADING...]
[LOADING...]Luis Majano2026年9月25日 224 次浏览

BoxLang AI 3.4.0:网关、人在回路与完整安全栈

AI

BoxLang [LOADING...]
[LOADING...]Cristobal Escobar2026年9月8日 187 次浏览

社区聚焦:BoxLang Express 将 Node 风格的 HTTP 带入 JVM

BoxLang

BoxLang [LOADING...]
[LOADING...]Cristobal Escobar2026年9月1日 165 次浏览

隆重推出 BX-WORD:面向 BoxLang 的原生 Microsoft Word 自动化

BoxLang