uniGUI开发的WEB独立服务程序并部署到Linux系统

(零)前言

其实整个步骤早有文章写过啦,请参考《这篇文章》,
我主要是记录一些关键点,以及没发现别人提过的注意事项。
请注意黄底字提示部分。

(一)uniGUI已经支持Linux

在这里插入图片描述
什么是uniGUI,它是一个Delphi下的WEB应用开发框架。它可以让我们象开发桌面应用一样的开发WEB应用,并支持独立部署,服务部署,或部署到常见的WEB容器中。

uniGUI官网得知,从版本1.90.0.1534开始支持Linux(64位)了。
需要Delphi 10.3和更高的版本。

提示:试用版并不支持Linux。

(二)准备uniGUI开发Linux应用所需环境

在开始为Linux创建uniGUI应用之前,您需要的前提条件:

1)Delphi 10.3 Rio企业版或更高版本
2)运行Linux Ubuntu 64或RedHat Linux的PC或VM

提示:CentOS相当于RedHat,所以也可以

(2.1)准备Linux服务器或虚拟机

呃,这部分就略过吧……

(2.2)准备和设置开发环境

就算不用uniGUI,只要开发Linux下的应用都必须要做。这里也大概抄一下吧。

(2.2.1)在Linux上安装运行PAServer

将RAD安装目录下的PAServer,比如:

C:\Program Files (x86)\Embarcadero\Studio\XX.0\PAServer\LinuxPAServerXX.0.tar.gz

拷贝到Linux服务器上,解压,运行,可以输入密码,看看有哪些指令。
总之只要运行起来就可以了,比如下图。
在这里插入图片描述

(2.2.2)Delphi中配置连接

输入平台类型(Linux64),主机名或IP,PAServer的端口(默认64211)。
添加完成后如图所示:
在这里插入图片描述

(2.2.3)Delphi中配置Linux的SDK

增加一个SDK,选Linux,选刚才配置好的连接。
在这里插入图片描述
然后会等很久,从Linux服务器拷贝很多所需的文件到本地SDK目录,比如:

C:\Users\XXX\Documents\Embarcadero\Studio\SDKs\centos7.sdk\

在SDK目录下会有lib64,usr目录,当然也可以完全不用去看目录。
完成后如下图。
在这里插入图片描述
请注意您的Linux服务器需要提前准备好开发必要的环境,PS:就是安装PAServer那台。先安装必要的开发相关的包,比如先:#yum install gcc 一类。否则后期编译可能报错,比如找不到 -lgcc_s一类的错误。

如果你已经编译报错,之后安装的gcc,那么请点击上图的按钮“Update Local File Cache”,更新本地文件缓存后应该可以解决缺少库的问题。

(三)开发部署Linux应用

官方帮助文档在这里,写得很详细。官网我经常访问不了,所以大概记录一下步骤。

(3.1)给uniGUI项目添加Linux平台

继续抄官网的图吧。。。
新建的就不说了,建立一个独立的uniGUI应用(standalone)。
如果是一个已有的项目,添加平台时发现没有Linux64,那么请用文本编辑器打开项目的.dproj文件把:

<FrameworkType>VCL</FrameworkType>

改为:

<FrameworkType>None</FrameworkType>

应该就可以看到Linux64平台的选项了。
在这里插入图片描述
在这里插入图片描述

(3.2)准备Linux下的运行库

如果你是在Windows下运行,直接运行不需要任何库,在别的服务器上部署,也有现成的runtime的可执行文件安装一遍就可以了,但是Linux下没这么简单。

需要拷贝这uniGUI下面的这几个目录到Linux下,下图这4个目录就是运行时库,官方很详细的介绍了怎么拷贝到Linux下,不过我觉得scp或者ftp应该很容易。

必须要拷贝库到Linux下,否则可以运行但WEB无法正常访问。
在这里插入图片描述

(3.3)代码中设置Linux下库目录

在Linux下需要在服务模块初始化事件里面,设置一个变量FrameworkFilesRoot ,设置的目录就是刚才那4个目录所在的位置:

procedure TUniServerModule.UniGUIServerModuleBeforeInit(Sender: TObject);
begin
{$ifdef Linux64}
  FrameworkFilesRoot := '/etc/fmsoft/unigui/unigui_runtime';
{$endif}
end;

上面是官方文档写的,我觉得很麻烦,不如在.bashrc,或者profile里面设置一个环境变量,这样也不需要针对不同服务器改配置了。
经过测试,用环境变量的方式不行!!!
暂时保留上面这段话,当作记录,记得设置FrameworkFilesRoot时要用绝对路径。

(3.4)编译和测试

编译吧,如果一切正确,则应该能够成功构建应用程序。
您的Linux可执行文件将位于… \ Linux64 \ Debug \文件夹下(没改过配置)。
在这里插入图片描述
您会注意到该文件没有扩展名,因为在Linux中没有可执行文件的默认扩展名(可以自己配置成编译输出成.exe啊,呵呵呵)。

准备运行该应用程序了。
假设PAServer应用程序正在Linux上运行,并且Delphi已正确配置可以与PAServer通信。

通过按F9,Delphi将开始将Linux应用程序部署到您的Linux服务器。
部署完成后,将在Linux服务器上以调试模式执行应用程序。

现在,您可以通过在浏览器选项卡中打开它来测试第一个uniGUI Linux应用程序。
您的应用程序的正确URL应为http:// linuxserver_ip_address:8077

在官方例子里,他们的Linux服务器位于地址192.168.1.15上。
因此我们应访问http://192.168.1.15:8077/

大概就是下图的样子,成功了:
在这里插入图片描述

(3.5)独立模式关闭程序

是的,猜对了,在Linux关不了……
因为没有图形界面,没有任务栏图标。
只能kill掉进程。

或者通过WEB的 server manage来关闭服务。

或者不要用独立模式,设置成服务,或者运行在其它WEB容器下。
这些不是重点。可以看官方文档或搜相关的文章。。。

这个文档中的话题与解决方案, 几乎全部来自 UniGUI 的交流群, 群中活跃的 BDS2007、 cmj 等人,给了众多使用 UniGUI 的人很多帮助。 这个文档, 主要是学习与方便后来之人, 文档积累的起因是严肃而正式的, 因为每个人 都有学习的需求;但文档的所谓版权、著述, 我希望它是有公益色彩的东西,如有哪位不希 望解决方案不出现在这里,请您告知。 此外, 就是期待大家都能把自己的一些经验, 给指导和帮助后来人的东西, 在不影响您 正常工作与其他事情的前提下,奉献出来。至于正确与错误、高超或低下,无关大体。 目 录 1. 事件中的代码在服务器端和客户端,哪一端执行? ........................................................... 3 2. 为什么 UniGUI 控件在 IE中显示的字体会变小、模糊? .................................................... 3 3. 在浏览器端不能使用 ShowMessage() .................................................................................... 5 4. 修改工程文件,使 exe 程序编译成 dll .................................................................................. 6 5. UniGUI 开发的 dll 如何发布 .................................................................................................... 7 6. uniGUI0.94 以 EXE形式发布程序的布署方法 ..................................................................... 13 7. uniGUI 执行程序部署有 3 种形式 ......................................................................................... 14 8. 在 UniGUI 里使用 ADO 的设置 .............................................................................................. 16 9. MainModule 怎样得到 js 变量的值 ...................................................................................... 16 10. TUniServerModule 和 TUniMainModule 这两模块有何区别 ....................................... 16 11. MainModule 里一般放什么, ServerModule 一般放什么? ....................................... 17 12. 主窗体的标题怎么去掉 ................................................................................................. 17 13. 用 ExtEvent 打开链接和下载文件 ................................................................................. 17 14. WebApplication 显示对话框 .......................................................................................... 17 15. Uni 中的 UniChart 的 Series增删 .................................................................................. 17 16. 怎样给每一个在线用户建立一套变量,在用户断开后立即清除 ............................. 18 17. TUniHiddenPanel 的作用 ................................................................................................ 18 18. UniDBGrid 如何转为 Excel供下载? ............................................................................. 18 19. uniGUI 实现 Excel的导出 .............................................................................................. 18 20. UniDBGrid Excel文件下载 .............................................................................................. 19 21. Excel文件导入系统 ........................................................................................................ 21 22. 文件转档与下载 ............................................................................................................. 21 23. Send File()应用 ............................................................................................................... 21 24. UniGUI 的 Canvas使用 ................................................................................................... 22 25. 动态生成 TTabSheet or TUniTabSheet ........................................................................... 22 26. UniGUI 中如果获得 Session情况 .................................................................................. 23 27. UniGUI Func 之 Sessions ............................................................................................... 23 28. uniGUI 通过 SessionList操作另外的登录用户 ............................................................ 24 29. UniGui 中如何监听 Session的开始与结束 ................................................................... 25 30. UniGUI 如何禁止关闭新窗口 ........................................................................................ 27 31. UniGUI 中控件类名的变化 ............................................................................................ 27 32. 再议 UniGUI 中使用 Grid+Rport 报表控件 (推荐此方法 ) ............................................. 28 33. UniGUI 的布局面板控件 TUniRegionPanel ................................................................... 28 34. UniGUI 使用报表 Grid+Report 的方法之一 (静态调用 ) ................................................ 28 35. UniGUI 使用报表 Grid+Report 的方法之二 (动态调用 ) ................................................ 28 36. UniGUI 中 Cookies 使用中文汉字的方法 ...................................................................... 28 37. UniGUI 如何实现压缩传输数据? ................................................................................ 29 38. UniGUI 的 ShowModal .................................................................................................... 29 39. UniGUI 前台用户如何在软件中点击一个按钮打开浏览器打开地址? ................ 29 40. How To Make Caption In UniGUI? ................................................................................. 30 41. 在 UniGUI 的 UniHtmlFrame 中不能使用的 HTML 标签 .............................................. 30 42. 利用 UniGUI 中的 TUniPageControl 实现多页面 .......................................................... 30 43. UniGUI TreeView 处理 .................................................................................................... 31 44. UniGUI 设置超时 ........................................................................................................... 31 45. UniGUI 如何实现登陆页面 ............................................................................................ 31 46. UniGUI 如何实现超链接 ................................................................................................ 32 47. 从 ASP网站登录到 UniGUI 中 ....................................................................................... 32 48. UniGUI 数据库初始化要放到 MainModule 里 ............................................................. 32 49. UniGUI Cookies ................................................................................................................ 32 50. Form Inheritance ............................................................................................................. 33 51. UniGUI 组件中的 Client JavaScript Delphi 组件之间的操作 ......................................... 33 52. JS能取 Delphi 控件的值? ............................................................................................ 34 53. 写 js 的注意 .................................................................................................................... 34 54. unigui 结合 JS方法记录 ................................................................................................. 34 55. JS,Jquery获取各种屏幕的宽度和高度 ......................................................................... 35 56. uniGUI 动态建立 Form 及释放 ...................................................................................... 37 57. uniGUI 经验两则 uniTimer uniHtmlFrame .................................................................... 37 58. uniGUI 使用百度地图 api 进行标注 .............................................................................. 37 59. fileupload 的问题 ........................................................................................................... 38 60. unigui unidbgrid 显示列的合计值 ................................................................................. 38 61. UniGui 中设置 uniEdit 控件的 fieldLabel ,emptyText 等 Extjs 属性 .............................. 40 62. uniGUI 用 Grid++Report 报表插件设计保存报表 (For unigui ver:0.95.0.1045) ............ 40 63. UniGUI 的 TUniLoginForm 窗口自定义背景色 .............................................................. 46 64. uniGUI 显示 Warning: Form must be shown after it is created 的解决办法 ................. 46 65. 界面上的快捷方式 ......................................................................................................... 46 66. 调用 WebService............................................................................................................. 47 67. TUniTreeView 的 CheckBox ............................................................................................ 49 68. 通过 URL来获取相关参数 ............................................................................................ 52 69. uniDBGrid 实行多选表格行 ........................................................................................... 52 70. UniDBGrid 增加显示记录数的 label 及隐藏 refresh 按钮 ............................................ 56 71. 对 UniDBGrid 的单元格操作 .......................................................................................... 57 72. DBGrid 多选后计算问题(是否可以作为参考?) .................................................... 58 73. UniDBGrid 选择字段 Boolean 处理 ................................................................................ 59 74. UniDBGrid 自带 MultiSelect 无法使用【最新版可以】 ............................................... 60 75. 如何打开 URL,让系统看起来舒服点 ......................................................................... 61 76. 如何修改 UniGUI 下的中文信息 ................................................................................... 62 77. 如何实现 UniDBGrid 下字段显示按钮 .......................................................................... 62 78. 如何实现 UniDBGrid 下字段自动换行 .......................................................................... 62 79. 如何结合 kbmMW .......................................................................................................... 63 80. 如何规避浏览器访问时 ajax 异常 ................................................................................ 63 81. 事件操作时,如果出现等待效果 ................................................................................. 63 82. 登录页面和主页面切换之间碰到的异常 ..................................................................... 63 83. 让 Page 中切换 Tab效果稍微好一点 ........................................................................... 64 84. UniImage 可以嵌入 PNG图片 ....................................................................................... 64 85. UniImage 自带导入 PNG图片的问题 ........................................................................... 65
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值