Deployment 如何将Sinatra应用程序作为gem发布并部署?
我有一个sinatra应用程序并打包了它。其文件布局大致如下所示:Deployment 如何将Sinatra应用程序作为gem发布并部署?,deployment,gem,sinatra,rack,Deployment,Gem,Sinatra,Rack,我有一个sinatra应用程序并打包了它。其文件布局大致如下所示: ├── bin │ └── tubemp ├── lib │ └── tubemp.rb ├── Gemfile └── tubemp.gemspec 我可以很好地安装和运行它。调用ruby-lib/tubemp.rb也会启动应用程序,因为Sinatra使其能够自动启动tubemp.rb: class Tubemp < Sinatra::Application get '/' do erb :index
├── 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
但现在我想将其部署为Rack应用程序。或者将其部署到机架应用程序中。至少它应该在生产机器上的乘客下运行
对于通用应用程序,只需在应用程序所在的目录中添加一个config.ru
。然后,该文件大致包括并调用runtubemp
。将nginx或apache的乘客指向此机架文件和应用程序所在的目录,启动它。
这很管用,直到我把它变成了一块宝石;因为现在我不再有“应用程序所在的目录”,除了gem install tubemp
决定放置文件的地方
我是否需要创建一个包装器应用程序来捆绑tubemp gem及其依赖项?如果是这样,如何从框架文件调用gem?还是我完全错了?现在忽略,下面是如何做到的:
应用程序绑定为gem,tubemp
安装并包含gemified应用程序的Gemfile
:
gem 'tubemp'
运行配对应用程序的config.ru
,名为Tubemp
:
#!/usr/bin/env ruby
require "tubemp.rb"
Tubemp.run!
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
这两个文件是创建新机架应用程序所需的全部内容,其中包括
Geminated Sinatra应用程序,因此可通过nginx等启动,
乘客或简单地行李架