我有一个 sinatra 应用程序并将其打包为 gem。它的文件布局大致如下:
├── bin
│ └── tubemp
├── lib
│ └── tubemp.rb
├── Gemfile
└── tubemp.gemspec
我可以很好地安装和运行它。调用ruby lib/tubemp.rb
也会触发应用程序,因为 Sinatra 让它自动启动。tubemp.rb
:
class Tubemp < Sinatra::Application
get '/' do
erb :index, :locals => { :title => "YouTube embeds without third party trackers." }
end
end
二进制文件也很简单。bin/tubemp
:
#!/usr/bin/env ruby
require "tubemp.rb"
Tubemp.run!
但现在我想将它部署为 Rack-app。或者将其部署在 Rack-app 中。至少它应该在生产机器上的乘客下运行。
对于通用应用程序,只需config.ru
在应用程序所在的目录中添加一个即可。然后,该文件粗略地包含并调用run Tubemp
. 将 nginx 或 apache 的乘客指向这个 rackup 文件和应用程序所在的目录,启动它。这很有效,直到我把它变成了一颗宝石;因为现在我不再有“应用程序所在的目录”,而是gem install tubemp
决定放置文件的位置。
我是否需要创建一个wrapper
捆绑 tubemp-gem 及其依赖项的应用程序?如果是这样,我如何从rackup
文件中调用 gem?还是我完全错了?