在Engee与Genie合作
*Engee*提供了使用*Genie*框架直接在您的环境中开发自己的应用程序的机会。 这允许用户在不离开Engee工作区的情况下创建自己的应用程序、web界面和各种集成解决方案。
*Engee*是一个现成的和定制的环境,用于运行使用Genie框架创建的应用程序。 *Engee*还为其修改提供了基本功能。 接下来,这篇文章展示了与精灵合作的基本原则,知道哪些,你可以根据你的需要调整现成的应用程序。 *Genie*是为Julia开发web应用程序的框架。 阅读更多有关框架的资料,请浏览 官方网站。 |
*Engee*环境经过优化,可与Genie框架配合使用,尽管完全支持Julia和Python内核,但不建议使用任何其他框架。 |
使用精灵
要在*Engee*中创建自己的应用程序,请按照以下说明操作。 应用程序可以表示为。带有’app’的jl脚本或目录。jl’文件。 这些应用程序放置在`/user`目录中。 启动、管理和使用基于Genie的应用程序的基本步骤如下所述。
-
应用程序放置-创建的应用程序必须放置在'/user’目录中。 如果应用程序是一个目录,请确保它包含"应用程序"。jl’文件。 安置的例子:
/user/apps/MyGenieApp/ app.jl public/ src/
-
启动应用程序-要启动应用程序,请运行以下命令:
engee.genie.start("/user/apps/MyGenieApp", devel=true, log_file="/user/apps/MyGenieApp")
这里:
-
'devel`:可选参数,启用开发模式,允许您在不重新启动的情况下查看更改。
-
'log_file':保存应用程序日志的路径。 这是没有必要指定。
如果指定了相对路径,则该命令搜索相对于当前目录的应用程序。
-
-
停止应用程序-要停止正在运行的应用程序,请运行:
engee.genie.stop("/user/apps/MyGenieApp")
路径可以设置为相对或绝对。
-
正在运行的应用程序列表-要检查当前正在运行的应用程序,请运行命令:
engee.genie.list()
-
将数据从应用程序传输到会话-"engee"功能。精灵。send(wsVarName,value)`用于将值从Genie应用程序传输到*Engee*工作区。 第一个参数’wsVarName’将变量名称设置为字符串。 第二个参数’value’是存储在变量中的值。 如果没有具有该名称的变量,则会自动创建该变量。 使用此功能一般保存中间结果和用户数据。 例如:
engee.genie.send("a", 42) engee.genie.send("message", "Hello")
-
*从会话获取数据到应用程序*是’engee’功能。精灵。recv(wsVarName;context=…)'允许您在Genie上的应用程序执行期间从*Engee*环境中获取变量的值。 'WsVarName’参数指定变量的名称。 如果变量是在另一个模块中定义的,那么`context`参数用于指定要在哪个命名空间中查找它。 如果变量预先定义在主应用程序模块的范围之外,这是必要的。 例如:
engee.genie.recv("a") engee.genie.recv("message") engee.genie.recv("value"; context=MyModule)
-
*工作区中的代码执行*是’engee’功能。精灵。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’参数,则该命令仍将输出当前日志。
在应用程序中使用第三方包
您可以在应用程序中使用第三方包。 要做到这一点,下载`项目。toml’文件并运行命令:
engee.genie.pkg_instantiate("/path/to/app")
与此同时:
-
文件的应用程序。jl’和’项目。toml’必须位于目录'/path/to/app’中。
-
'项目。toml'*不应该包含*Engee*包,但它们仍然可用于精灵。
用于处理包的其他命令:
- 查看已安装软件包的列表
-
要列出应用程序中使用的所有包,请运行命令:
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"])
使用的限制和特点
在Genie中,数组从零开始索引,不像Julia,索引从一开始。 |
-
无法安装未包含在*Engee*构建中的新软件包。 但是,您可以使用以下命令查看可用的包:
print(read("/usr/local/genie/environments/v1.10/Project.toml",String))
-
一个应用程序显示为一个目录与"应用程序"。jl’文件被认为是标准的。 这是组织项目的推荐方式。
文章中详细介绍了软件管理"精灵"的公共方法。 精灵的公共软件管理方法.
创建应用程序的示例
创建’应用程序。jl’文件在'/user’目录下 文件浏览器 :
→
在’应用程序。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
这是’App’模块的开始。 在Julia中,模块用于组织代码并将其隔离。 所有的应用程序代码都将在这个模块中。
-
连接"精灵工作"图书馆:
using GenieFramework @genietools
这里:
-
'使用GenieFramework':连接库以与web应用程序一起工作;
-
'@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([]
':数字输入字段'(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*会话已完成且应用程序保持打开状态,系统将发出错误。: