在 Engee 中使用 Genie
Engee 提供直接在其环境中使用 Genie 框架开发定制应用程序的能力。这样,用户就可以创建自己的应用程序、网络接口和各种集成解决方案,而无需离开*Engee*工作区。
Engee 是一个随时可用的定制环境,可用于运行使用 Genie 框架创建的应用程序。此外,Engee 还提供修改应用程序的基本功能。下文将向您介绍使用 Genie 的基本原则,了解了这些原则,您就能根据自己的需要调整现成的应用程序。 *Genie*是为Julia开发网络应用程序的框架。有关该框架的更多信息,请访问官方网站。 |
尽管有 Julia 内核和 Python 支持,但*Engee*环境已针对 Genie 框架进行了优化,不建议使用任何其他框架。 |
使用 Genie
要在*Engee*中创建自己的应用程序,请遵循以下说明。应用程序可以是 .jl 脚本的形式,也可以是包含`app.jl`文件的目录形式。此类应用程序放置在 /user
目录中。以下是运行、管理和使用基于 Genie 的应用程序的基本步骤。
-
放置应用程序 - 创建的应用程序应放置在
/user`目录中。如果应用程序是一个目录,请确保其中包含 `app.jl
文件。放置示例:/user/apps/MyGenieApp/ app.jl public/ src/
-
启动应用程序 - 运行以下命令启动应用程序:
engee.genie.start("/user/apps/MyGenieApp", devel=true, log_file="/user/apps/MyGenieApp")
这里:
-
devel`:可选参数,用于启用开发模式,允许您在不重启的情况下查看更改。
-
log_file`:保存应用程序日志的路径。它是可选参数。
如果指定了相对路径,命令将搜索当前目录下的应用程序。
-
-
Stop application - 停止运行中的应用程序,执行:
engee.genie.stop("/user/apps/MyGenieApp")
路径可设置为相对路径或绝对路径。
-
运行中的应用程序列表 - 要查看当前运行的应用程序,请运行该命令:
engee.genie.list()
-
从应用程序向会话传输数据 -
engee.genie.send(wsVarName,value)`函数用于从 Genie 上的应用程序向 Engee 工作区发送数值。第一个参数 `wsVarName
以字符串形式指定变量名。第二个参数value
是存储在变量中的值。如果没有同名变量,则会自动创建。一般情况下,使用此函数可以保存中间结果和用户数据。例如engee.genie.send("a", 42) engee.genie.send("message", "Hello")
-
从会话获取数据到应用程序 -
engee.genie.recv(wsVarName;context=…)`函数允许您从*Engee*环境中获取变量值,同时在 Genie 上运行应用程序。参数 `wsVarName
指定了变量的名称。如果变量是在其他模块中定义的,context
参数用于指定在哪个命名空间中查找。如果变量是在主应用模块范围之外预先定义的,则必须使用该参数。例如engee.genie.recv("a") engee.genie.recv("message") engee.genie.recv("value"; context=MyModule)
-
在工作区中执行代码 - `engee.genie.eval(code::AbstractString)`函数允许您直接从 Genie 应用程序在*Engee*工作区中的 Julia 上执行任意代码。它可用于运行单个表达式、调试或动态执行代码,而无需重启应用程序。
engee.genie.eval("x = 10") engee.genie.eval("println(\"Значение x: \$x\")")
传递的
code::AbstractString
将在当前 Engee* 会话的全局区域内执行。这样,就可以通过在Engee**会话中传递来自 Genie 应用程序的命令,从外部操作变量或逻辑。 -
查看应用程序日志 - 要获取运行中应用程序的日志,请使用以下命令:
engee.genie.logs("/user/apps/MyGenieApp")
如果在启动应用程序时没有指定
log_file
参数,该命令仍将输出当前日志。
在应用程序中使用第三方软件包
您可以在应用程序中使用第三方软件包。
为此,请加载 Project.toml
文件并运行该命令:
engee.genie.pkg_instantiate("/path/to/app")
在这种情况下
-
app.jl "和 "Project.toml "文件必须位于"/path/to/app "目录下。
-
Project.toml
不应*包含*Engee*软件包,但 Genie 仍可使用它们。
处理软件包的附加命令:
查看已安装软件包的列表:: 要显示应用程序中使用的所有软件包的列表,请运行以下命令:
+
engee.genie.pkg_status("/path/to/app")
安装新软件包:: 要安装一个或多个软件包,请使用
+
engee.genie.pkg_add("/path/to/app", "SomePackage")
+ 或
+
engee.genie.pkg_add("/path/to/app", ["SomePackage1", "SomePackage2"])
删除软件包 要删除一个或多个软件包,请执行
+
engee.genie.pkg_rm("/path/to/app", "SomePackage")
+ 或
+
engee.genie.pkg_rm("/path/to/app", ["SomePackage1", "SomePackage2"])
使用限制和说明
-
无法安装未包含在 Engee 版本中的新软件包。不过,您可以使用以下命令查看可用软件包:
print(read("/usr/local/genie/Project.toml",String))
-
以带有
app.jl
文件的目录表示的应用程序被视为标准应用程序。这是组织项目的推荐方式。
关于 genie
程序管理公共方法的详细说明,请参阅吉尼的公开计划管理方法 一文。
创建应用程序示例
在 /user
目录中创建一个 app.jl
文件文件浏览器 :
->
在 app.jl
文件中,添加使用 Genie 框架编写的应用程序的代码:
module App
using GenieFramework
@genietools
@app begin
@in N = 0
@out squared = 0
@onchange N begin
squared = N^2
end
end
function ui()
[
cell([
p("Enter a number to calculate its square:")
]),
cell([
textfield("N", :N)
]),
cell([
bignumber("The square of the number is:", :squared)
])
]
end
@page("/", ui)
end
应用程序代码的详细说明
-
创建模块:
module App
这是一个 "应用程序 "模块的开始。在 Julia 中,模块用于组织代码并将其隔离。所有应用程序代码都在这个模块中。
-
连接
GenieFramework
库:using GenieFramework @genietools
这里:
-
using GenieFramework
:运行网络应用程序的插件库; -
@genietools
: 为应用程序准备环境的宏,包括连接必要的资源(如图标和样式)。
-
-
声明反应式应用程序:
@app begin @in N = 0 @out squared = 0
在这里
-
@app
:反应式应用程序代码块的开始; -
@in N = 0
: 声明一个存储自定义值的反应式变量N
; -
@out squared = 0
: 声明一个反应式变量`squared
,用于保存一个数字的平方。该变量为只读变量。
-
-
反应逻辑
@onchange N begin squared = N^2 end
这里
-
@onchange N
: 表示当变量 N 的值发生变化时,执行以下代码块; -
squared = N^2
:更新变量squared
的值(将输入的数字平方)。
-
-
用户界面定义:
function ui() [ cell([ p("Enter a number to calculate its square:") ]), cell([ textfield("N", :N) ]), cell([ bignumber("The square of the number is:", :squared) ]) ] end
这里:
-
function ui()
: 定义创建应用程序界面的函数; -
cell([…]): 将界面元素打包到一个结构块中:
-
第一个区块
cell([])
: 显示带有指令的文本:输入数字以计算其平方"; -
第二块
cell([])
: 数字输入框(textfield("N", :N))
;-
"N"
: 输入字段的签名; -
:N:`: 字段与变量
N
的关系;
-
-
第三块
cell([])
: 使用bignumber
显示结果(数字的平方);-
`"数字的平方是:":签名;
-
:squared:
链接到变量`squared
.
-
-
-
-
创建路由并关闭模块
@page("/", ui) end
这里
-
@page("/")
:指定应用程序主页的路径
(/)`; -
ui
: 表示页面内容将由ui
函数生成; -
end
: `App`模块的结束。
-
接下来,保存更改后的 app.jl
应用程序文件:
然后使用命令运行应用程序:
engee.genie.start("/user/app.jl")
此应用程序允许您对输入的数字进行平方运算,展示了如何在 Engee 工作区中创建自己的应用程序。
如果 Engee 会话已终止,而应用程序仍处于打开状态,系统将产生错误: