Delphi开发Linux版的kbmMW Server

摘要:
该项目要求应用程序服务器必须在CentOS上运行。kbmMWServer for Windows终于在CentOS上运行已经三天了。追踪代码。研究发现,Indy的问题是原因。用TCPServerTransport替换它是正常的。它在PAServer中正常运行,但当它独立运行时,无法打开数据库文件。KbmMW5.10.20在Linux下,FileService读取的文件中存在错误,需要使用xalion修改该文件。也就是说,/usr/yh/kserver不存在。

项目需要,必须在CentOS上运行应用服务器,不得矣,已经三天的时间,终于把windows版的kbmMW Server运行到CentOS上了。一路坎坷,Linux从0开始,多亏xalion等朋友们相助,能出了第一个结果。

很早就想尝试用Linux做服务器,但迟迟没得动手,想不到最终还是现实逼的迫不得矣,这三天,从安装CentOS 7,再学习简单的命令,搭建Delphi环境,编译输出应用到Linux上运行,每一步都是卡,必竟从0开始...

xalion建议我说用Ubuntu,他就是在这上面做的,而我想用户只给我CentOS,所以我想还是尝试用CentOS,虽然一路艰难,这三天终于有了初步的结果,感觉还好。

现在总结一下遇到的问题:

1.编译出错:

 Delphi开发Linux版的kbmMW Server第1张

 出这个错的原因是少了开发库libcurl,在CentOS上终端上,用root用户执行:

yum install libcurl4-gnutls-dev
yum install p7zip-full
yum install libcurl
yum install libcurl-devel
yum install zlib-devel

//执行完这些,然后重新下载 sdk 

感谢此文【Delphi 下开发编译 Linux 程序教程全过程, 图文并茂详解】作者告诉解决方法。

2.在服务端中止(退出)应用服务器卡死

应用服务器一但被访问了,当执行kbmMWServer.Active卡死了。跟踪代码,发现是Indy的问题造成的,换成TCPServerTransport正常。

3.打不开sqlite数据库文件

我用了一个sqlite存系统的设置参数,通过uniDAC访问这个数据库。在PAServer中运行正常,但独立运行时,显示打不开数据库文件。最后查明,当独立运行时,取到的是相对路径,最后用下面的代码,得到绝对路径。

  filepath := IncludeTrailingPathDelimiter(TPath.GetDirectoryName(TPath.GetFullPath(ParamStr(0)))) + 'config.db3';

上面代码,先通过命令行参数,通过GetFullPath取得完整的路径,再用GetDirectoryName取得路径名称,这时候是一个完整的路径了,然后再组合成含有数据库文件名的数据库文件路径。

结论,uniDAC要用完整的数据库文件的路径,才能打开SQLite数据库。当然,这是Linux下要这么处理,对于Windows来说不存这个问题。

4.编译错误:System error:Text file busy

Delphi开发Linux版的kbmMW Server第2张

 这个原因在linux上应用正在运行,退出应用即可。如果无界面,可以杀死进程序:

Delphi开发Linux版的kbmMW Server第3张

 如上图,执行ps -a 列出进程,然后用kill 12792

干掉指定的进程。

5.文件服务出错:

Delphi开发Linux版的kbmMW Server第4张

 原来在带GUI的应用服务器上,是正常的,转到CONSOLE上出这个错误。

看了一下,原来FileService的FilePool是在设计期指定的,改到动行期指定:

Delphi开发Linux版的kbmMW Server第5张

上图设计期指定的FilePool,改成代码指定:

procedure TFileService.kbmMWFileServiceCreate(Sender: TObject);
begin
  Self.FilePool:=MainDatamodule.kbmMWFilePool1;
end;

OK,这个问题算是解决快的。

kbmMW 5.10.20在linux下,FileService读取文件有bug,需要用xalion改的文件。我在这个问题上又浪费几个小时,本来xalion之前就告诉我的,要用他改的文件。

6.开启防火墙

增加paserver的访问端口并reload

firewall-cmd --add-port=64211/tcp --permanent
firewall-cmd --reload

 7.快速查看Centos7系统日志

8.重载服务

systemctl daemon-reload

 这个命令很重要,如果把服务从一个目录部署到另外的目录,修改完后,一定要执行一下这个命令。

我遇到这个问题,查了三个半小时,原来是这个原因。出的错误是:

Delphi开发Linux版的kbmMW Server第6张

进一步查系统日志,是这个错误:

Delphi开发Linux版的kbmMW Server第7张

上图,/usr/yh/kserver是我原来部署的目录,换到/home/yh/kserver后,出的错误。就是说 /usr/yh/kserver是不存在的。

记得用命令 systemctl daemon-reload ,就搞定了!

我的生命啊!就这样,又没了几个小时。

10.CentOS7设置共享文件夹

11.竹子遇到这个错误提示 /PAServer-20.0/linuxgdb: error while loading shared libraries: libncurses.so.5: cannot open shared object file: No such file or directory

解决方案

su root
sudo yum install ncurses* 
环境:centos8

12 Linux下kbmmw 服务器的开机自动启动

这个xalion写的文章,必读! 我参考xalion写的,在centos上,有所差别,把kserver.service复制到目录/usr/lib/systemd/system,然后就可以systemctl start kserver.service了。

配置自启动服务,按下面操作:

//进入
cd /etc/systemd/system/multi-user.target.wants,
//建立自启动服务联接文件:
ln -s /usr/lib/systemd/system /kserver.service kserver.service

13.竹子建议用SecureCRT

SecureCRT是一款支持SSH(SSH1和SSH2)的终端仿真程序,简单地说是Windows下登录UNIX或Linux服务器主机的软件。

14.ide 无法联接paserver

产生这个问题,可能的原因有三个:

1.在linux上要运行paserver

2.防火墙要打开64211端口,记得重新设置防火墙后要reload一下才能生效。

3.ide要允许访问网络,这是竹子遇到的情况

当然,在ide中设置正确的ip及端口是必须的。

15.centos 7关闭系统休眠

长时间不工作,网卡会自动休眠,动动鼠标或者键盘又能重新联网。
解决方法:vi /etc/default/grub (centons7之前的系统,路径为vi /etc/grub.conf)
添加pcie_aspm=off 重启,该方法是关闭电源管理系统,防止休眠。

GRUB_TIMEOUT=5
GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)"
GRUB_DEFAULT=saved
GRUB_DISABLE_SUBMENU=true
GRUB_TERMINAL_OUTPUT="console"
GRUB_CMDLINE_LINUX="crashkernel=auto rd.lvm.lv=centos/root rd.lvm.lv=centos/swap rhgb quiet"
GRUB_DISABLE_RECOVERY="true"

pcie_aspm=off

免责声明:文章转载自《Delphi开发Linux版的kbmMW Server》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇几款主流 NoSql 数据库的对比Visual C++内存泄露检测—VLD工具使用说明 .下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Ubuntu Linux系统下aptget命令详解

常用的APT命令参数:apt-cache search package 搜索包apt-cache show package 获取包的相关信息,如说明、大小、版本等sudo apt-get install package 安装包sudo apt-get install package - - reinstall 重新安装包sudo apt-get -f in...

单点突破:MySQL之日志

前言 开发环境:MySQL5.7.31 日志是 mysql 数据库的重要组成部分,记录着数据库运行期间各种状态信息。若数据库发生故障,可通过不同日志记录恢复数据库的原来数据。因此实际上日志系统直接决定着MySQL运行的鲁棒性和稳健性。MySQL中有六种日志文件,分别是:重做日志(redo log)、回滚日志(undo log)、二进制日志(binlog)、...

linux性能评估-磁盘io概念理解篇

1.Linux 文件系统的工作原理 1.索引节点和目录项 2.虚拟文件系统 3.文件系统 I/O 4.性能观测 2.Linux 磁盘 IO 的工作原理 1.磁盘 2.通用块层 3.I/O 栈 4.磁盘性能指标 1.Linux 文件系统的工作原理 1.索引节点和目录项 在 Linux 中一切皆文件。不仅普通的文件和目录,就连块设备、套接字、管...

[转]Oracle 创建 DBLink 的方法

http://blog.csdn.net/davidhsing/article/details/6408770 1、如果需要创建全局 DBLink,则需要先确定用户有创建 dblink 的权限: select * from user_sys_privs where privilege like upper('%DATABASE LINK%');    如果...

[delphi]极域学生端解除键盘鼠标锁定退出全屏广播-强制窗口化-源代码

v2.0 2015-07-11 更新了V2.0 版本 发布在吾爱破解论坛 欢迎下载使用 http://www.52pojie.cn/thread-382769-1-1.html -------------------------------------------------------------------------- v1.0 2013-06-23...

SQL Server 本地数据库登录不上 解决方法

sql本地数据库登录不了的话。先看看自己计算机 服务 SQL server  (MSSQLSERVER)  没有打开的话,请打开。 今天说的情景模式是  你误删了windows登录;禁用了sa登录;sa密码忘记了;或是你计算机名字被公司修改了,老的名字忘记了;又或是你用的别人的之前安装好的SQL数据库,终归,你本地数据库登录不了,用不了,拉了胯。   1...