我在Ubuntu的OCaml中开发了一个桌面应用程序。
现在,我想将它部署到我拥有的DigitalOcean Ubuntu服务器(512 MB内存/ 20 GB磁盘)。我将在客户端使用JavaScript程序来调用存储在服务器端的可执行文件,然后处理返回的结果。
但是,我不知道如何开始。
有人向我指出了FastCGI,我确实在Nginx服务器中看到了一些FastCGI设置。似乎有一些OCaml库来处理FastCGI或CGI:ocamlnet
,cgi
,CamlGI
等。
有人能告诉我哪个库稳定并且符合我的需要吗?
此外,是否有一些库的示例和Nginx服务器中的设置让我开始使用?
答案 0 :(得分:1)
我不认为我会提出的解决方案不那么沉重,但它有几个优点:
这个神奇的工具是什么? Ocsigen!您可以找到完整的教程here。
现在让我们看看如何使用它
首先,如果您没有,请安装opam(它将允许您安装ocaml软件包)。只需按照网站上的说明操作(我不能粘贴链接,因为我没有足够的声誉点),但基本上是为了ubuntu运行:
sudo add-apt-repository ppa:avsm/ppa
sudo apt-get update
sudo apt-get install ocaml ocaml-native-compilers camlp4-extra m4 opam
然后,您需要安装Ocsigen。所有说明都在这里:https://ocsigen.org/install但基本上只是这样做:
sudo aptitude install libev-dev libgdbm-dev libncurses5-dev libpcre3-dev libssl-dev libsqlite3-dev libcairo-ocaml-dev m4 opam camlp4-extra
opam install eliom
(注意:如果您不想安装/使用opam,也可以使用apt-get安装它,但我更喜欢使用opam来处理ocaml,你可以选择精确的版本......)
好了,你现在已经安装了ocsigen!
然后创建一个基本的脚手架网站,运行
eliom-distillery -name mysite -template basic -target-directory mysite
并运行它:
cd mysite/
make test.byte
您应该在localhost上看到一个基本页面:8080 /.
现在,让我们插入您的代码。让我们想象它被命名为myscript
并返回一个字符串:
let myscript () = "Here is my amazing result"
在文件let () =
中的mysite.eliom
之前添加此代码,然后在h2 [pcdata "Welcome from Eliom's distillery!"];
行之后添加:
p [pcdata (Printf.sprintf "My script gives the return function : \"%s\"" (myscript ()))]
这将创建一个paragraphe(p),其内容(pcdata)包含myscritpt
的结果。
对我来说整个mysite.eliom给出了:
{shared{
open Eliom_lib
open Eliom_content
open Html5.D
}}
module Mysite_app =
Eliom_registration.App (
struct
let application_name = "mysite"
end)
let main_service =
Eliom_service.App.service ~path:[] ~get_params:Eliom_parameter.unit ()
let myscript () = "Here is my amazing result"
let () =
Mysite_app.register
~service:main_service
(fun () () ->
Lwt.return
(Eliom_tools.F.html
~title:"mysite"
~css:[["css";"mysite.css"]]
Html5.F.(body [
h2 [pcdata "Welcome from Eliom's distillery!"];
p [pcdata (Printf.sprintf "My script gives the return function : \"%s\"" (myscript ()))]
])))
(请注意,let application_name = "mysite"
必须遵循您向eliom-distillery提供的名称。如果情况并非如此,则您的javascript不会被链接)
让我们再次编译:
make test.byte
现在在localhost:8080,您可以阅读:
My script gives the return function : "Here is my amazing result"
包含了脚本的结果!
您还可以定义要在客户端运行的myscript,获取一些Post / Get参数,或者只在几行中实时与页面通信,但如果您想了解更多信息,请阅读ocsigen教程!
我不确定你是否真的需要将它与Nginx接口,因为ocsigenserver应该作为(http)服务器运行,但是如果需要,你总是可以通过使用反向代理将ocsigenserver behing为Nginx服务器(或者相反,你可以从ocsigenserver服务Nginx,阅读ocsigenserver手册了解更多细节)。