如何使用冻结的字符串文字启动 Rack 应用程序?

How to start Rack application with frozen string literals?

我正在尝试 运行 我们的应用程序在 ruby 2.3 下使用新的 ruby 功能在全局启用自动冻结字符串。 (Ruby 2.3) 这通常是通过在启动时将参数传递给 ruby 脚本来完成的,如下所示:

ruby --enable-frozen-string-literal ruby_code_file.rb

不幸的是,我们的应用程序是使用 rackup 启动的,我尝试了以下命令:

rackup --enable-frozen-string-literal

但这似乎不起作用。我如何将该参数传递给 Rack?

很遗憾,您无法将 ruby 的参数传递给 rackup。但是,rackup 真的非常简单:

#!/usr/bin/env ruby

require "rack"
Rack::Server.start

然后,最简单的解决方案是在您的项目中复制此文件(例如 bin/frozen_rackup),但将第一行更改为:

#!/usr/bin/env ruby --enable-frozen-string-literal

然后确保文件是可执行的 (chmod u+x bin/frozen_rackup) 并且 运行 bin/frozen_rackup 而不是 rackup.

P.S。我猜 --enable-frozen-string-literal 不适用于您的脚本所需的宝石,因为它会破坏很多宝石,但我还没有测试过这个和 YMMV。