如何在我的本地 apache 服务器上显示我的 Wt 应用程序?

How to display my Wt application in my local apache server?

我对 Wt 和 cgi 东西很陌生。我想做的是用 C++ 编写一个 Web 应用程序。这要归功于 Wt 库:

https://www.webtoolkit.eu/wt

显然有两种模式:http 和 fastcgi。前者使用起来很简单:我编译我的代码和 运行 bin。这将启动某种网络服务器(我的词汇可能不准确,因为我是该领域的大菜鸟)并输出服务器的地址和端口。在我最喜欢的浏览器中输入所有这些内容会显示我用 C++ 编写的网页。

我对后者有一个大问题,这很烦人,因为这是在托管远程服务器上部署软件的唯一方法。

为了部署测试 Web 服务器,我采用了在 Wt 库中找到的 hello 示例,并通过定义 cmake 变量 EXAMPLES_CONNECTOR=wtfcgi 将其链接到 wtfcgi。

之后,我安装了apache2并进行了设置。我做了以下事情:

我安装了以下 Ubuntu 个软件包:

libapache2-mod-fastcgi
apache2
apache2-bin
apache2-data
apache2-utils

然后,

  1. 使用 a2enmod
  2. 为 Apache 启用 mod_fastcgi
  3. 像这样修改配置文件fastcgi.conf:

<IfModule mod_fastcgi.c>; AddHandler fastcgi-script .wt FastCgiIpcDir /var/lib/apache2/fastcgi FastCgiConfig -idle-timeout 100 -maxClassProcesses 1 -initial-env WT_APP_ROOT=/tmp FastCgiServer /var/www/wt/hello.wt </IfModule>

  1. 为 wt 应用程序创建一个新的站点配置文件,/etc/apache2/sites-available/wt.conf:

<Directory /var/www/wt/> Allow from all Options +ExecCGI </Directory>

  1. 将我的Wt示例代码复制到文件夹/var/www/wt/hello.wt

  2. 启用站点并重新加载 apache

a2ensite wt service apache2 reload

然后,在那之后,/var/log/apache2/error.log给了我

[Fri Jun 16 22:52:30.176846 2017] [core:notice] [pid 1676:tid 139808785006080] AH00094: Command line: '/usr/sbin/apache2'
[Fri Jun 16 22:52:30.177041 2017] [:warn] [pid 1678:tid 139808785006080] FastCGI: server "/var/www/wt/hello.wt" started (pid 1682)
[2017-Jun-16 22:52:30.328742] 1682 - [info] "WServer/wtfcgi: initializing relay server"
[2017-Jun-16 22:52:30.332011] 1682 - [info] "config: reading Wt config file: /etc/wt/wt_config.xml (location = '/var/www/wt/hello.wt')"
[2017-Jun-16 22:52:30.334308] 1682 - [info] "wtfcgi: spawned session process: pid = 1737"
[2017-Jun-16 22:52:30.334383] 1682 - [error] "wtfcgi: fatal: cannot create run directory '/var/run/wt'"
[Fri Jun 16 22:52:30.337635 2017] [:warn] [pid 1678:tid 139808785006080] FastCGI: server "/var/www/wt/hello.wt" (pid 1682) terminated by calling exit with status '1'
[2017-Jun-16 22:52:30.375392] 1737 - [info] "config: reading Wt config file: /etc/wt/wt_config.xml (location = '/var/www/wt/hello.wt')"
[2017-Jun-16 22:52:30.375519] 1737 - [info] "WServer/wtfcgi: initializing shared wtfcgi session process"
[2017-Jun-16 22:52:30.375708] 1737 - [error] "wtfcgi: fatal: bind(): No such file or directory"

之后,我遵循了这个网页中给出的建议:

http://redmine.webtoolkit.eu/projects/wt/wiki/Fastcgi_on_apache

例如,我自己创建了 /var/run/wt 并将其所有者更改为 www-data。然后我得到了这个日志:

AH00112: Warning: DocumentRoot [/var/www/html] does not exist
AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1. Set the 'ServerName' directive globally to suppress this message
[Fri Jun 16 23:15:53.355484 2017] [:notice] [pid 1994:tid 139719627398656] FastCGI: process manager initialized (pid 1994)
[Fri Jun 16 23:15:53.355544 2017] [mpm_event:notice] [pid 1656:tid 139719627398656] AH00489: Apache/2.4.18 (Ubuntu) mod_fastcgi/mod_fastcgi-SNAP-0910052141 configured -- resuming normal operations
[Fri Jun 16 23:15:53.355554 2017] [core:notice] [pid 1656:tid 139719627398656] AH00094: Command line: '/usr/sbin/apache2'
[Fri Jun 16 23:15:53.355676 2017] [:warn] [pid 1994:tid 139719627398656] FastCGI: server "/var/www/wt/hello.wt" started (pid 1995)
[2017-Jun-16 23:15:53.365485] 1995 - [info] "WServer/wtfcgi: initializing relay server"
[2017-Jun-16 23:15:53.365675] 1995 - [info] "config: reading Wt config file: /etc/wt/wt_config.xml (location = '/var/www/wt/hello.wt')"
[2017-Jun-16 23:15:53.365878] 1995 - [info] "wtfcgi: spawned session process: pid = 2052"
[2017-Jun-16 23:15:53.365942] 1995 - [info] "wtfcgi: reading FastCGI stream from stdin"
[2017-Jun-16 23:15:53.373121] 2052 - [info] "config: reading Wt config file: /etc/wt/wt_config.xml (location = '/var/www/wt/hello.wt')"
[2017-Jun-16 23:15:53.373243] 2052 - [info] "WServer/wtfcgi: initializing shared wtfcgi session process"

然后看起来不错。但是,当我现在在我的 firefox 浏览器上显示地址 127.0.1.1 时,我仍然看到默认的 apache2 网页。为什么我看不到 hello 示例?我该如何解决?我是否必须编写一个调用 hello.wt 的特殊 html 页面?它是如何工作的?

似乎有什么东西开始了,但没有保持 运行ning。我在哪里可以找到它的日志?

提前致谢!

我通过执行以下操作设法使其工作:

  1. 确保文件夹 /var/www/html 存在并将我的 wt 应用程序复制到那里

  2. 修改配置文件fastcgi.conf如下:

<IfModule mod_fastcgi.c> AddHandler fastcgi-script .wt FastCgiIpcDir /var/lib/apache2/fastcgi FastCgiConfig -idle-timeout 100 -maxClassProcesses 1 -initial-env WT_APP_ROOT=/tmp FastCgiServer /var/www/html/hello.wt </IfModule>

  1. 删除 wt 应用程序的站点配置文件:

    /etc/apache2/sites-enabled/wt.conf

因为对进程没有影响

  1. 重新加载 apache

    服务 apache2 重新加载

现在,当我输入地址时

localhost/hello.wt

在我的浏览器中,我可以看到显示的示例,假设

/var/run/wt

可以由 www-data 用户创建。