我有一个sinatra应用程序并打包as a 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中。至少它应该在生产机器上的Passenger下运行。
使用通用应用程序,就像在应用程序所在的目录中添加config.ru
一样简单。然后,该文件粗略地包含并调用run Tubemp
。将nginx或apache的乘客指向此机架文件和应用程序所在的目录,启动它。
这很有效,直到我把它变成了宝石;因为现在我不再拥有“应用程序所在的目录”,除了gem install tubemp
决定放置文件的地方。
我是否需要创建一个捆绑了tubemp-gem及其依赖项的wrapper
应用程序?如果是这样,我如何从rackup
文件中调用gem?或者我完全错了?
答案 0 :(得分:2)
暂时忽略path-issues,I solved it:
的方式如下捆绑为gem的应用程序tubemp
。
安装并包含gemified应用程序的Gemfile
:
gem 'tubemp'
运行gemified应用程序的config.ru
,名为Tubemp
:
require 'rubygems'
require 'bundler/setup' # To allow inclusion via the Bundle/Gemfile
require 'sinatra' # Sinatra is required so we can call its "set"
require 'tubemp' # And include the application
# Set the environment to :production on production
set :environment, ENV['RACK_ENV'].to_sym
# And fire the application.
run Tubemp
这两个文件是制作新机架应用程序所需的全部内容,其中包括
宝石化的Sinatra-app,因此是可引导的槽,例如nginx的,
乘客或只是rackup
。