在生产模式下启动水晶

sty*_*972 5 crystal-lang kemal

我一直在运行我的Crystal webapp,通过构建它,然后运行可执行文件.但是,它总是侦听端口3000.

如何在80和443上构建/运行Crystal Web应用程序?

我也在使用凯末尔.这是我的示例应用程序.

require "kemal"

get "/" do
  "Hello World!"
end

Kemal.run
Run Code Online (Sandbox Code Playgroud)

建造:

crystal build src/myapp.cr
Run Code Online (Sandbox Code Playgroud)

运行:

./myapp
Run Code Online (Sandbox Code Playgroud)

Vit*_*upt 6

只需将端口传递给Kemal.run:

require "kemal"

get "/" do
  "Hello World!"
end

port = ARGV[0]?.try &.to_i?
Kemal.run port
Run Code Online (Sandbox Code Playgroud)

建立:

crystal build src/myapp.cr
Run Code Online (Sandbox Code Playgroud)

跑:

./myapp # default port 3000
./myapp 80
./myapp 443
Run Code Online (Sandbox Code Playgroud)

  • 请注意,绑定到特权端口(端口号<1024)通常需要超级用户权限.对于在生产环境中运行,您可能需要某种服务管理来确保应用程序的可用性. (2认同)
  • **@ Vitalii Elenhaupt**使用`--release`标志构建Kemal应用程序并不能保证在`production`模式下运行它.它仍将以"开发"模式运行,具有发布级别优化.在生产模式下运行它的一种方法是使用`KEMAL_ENV = production`变量将其导出到系统环境中,或者使用Kemal可执行文件作为`KEMAL_ENV = production ./myapp 80` (2认同)