ber*_*kes 5 deployment gem rack sinatra
我有一个sinatra应用程序并将其打包为宝石.它的文件布局看起来大致如下:
??? bin
? ??? tubemp
??? lib
? ??? tubemp.rb
??? Gemfile
??? tubemp.gemspec
Run Code Online (Sandbox Code Playgroud)
我可以安装并运行它就好了.呼叫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
Run Code Online (Sandbox Code Playgroud)
二进制文件也很简单.bin/tubemp:
#!/usr/bin/env ruby
require "tubemp.rb"
Tubemp.run!
Run Code Online (Sandbox Code Playgroud)
但现在我想将其部署为Rack-app.或者将其部署在Rack-app中.至少它应该在生产机器上的Passenger下运行.
使用通用应用程序,就像config.ru在应用程序所在的目录中添加a一样简单.然后,该文件粗略地包括和调用run Tubemp.将nginx或apache的乘客指向此机架文件和应用程序所在的目录,启动它.这很有效,直到我把它变成了宝石; 因为现在我不再拥有"应用程序所在的目录",gem install tubemp除此之外决定放置文件.
我是否需要创建一个wrapper捆绑了tubemp-gem及其依赖项的应用程序?如果是这样,我如何从rackup文件中调用gem ?还是我完全错了?
该应用程序捆绑为 gem tubemp,.
AGemfile安装并包含 gemified 应用程序:
gem 'tubemp'
Run Code Online (Sandbox Code Playgroud)
Aconfig.ru运行 gemized 应用程序,称为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
Run Code Online (Sandbox Code Playgroud)
这两个文件是制作新的机架应用程序所需的全部文件,其中包括宝石化的 Sinatra 应用程序,因此可以通过 nginx、passenger 或简单的rackup.