如何将Sinatra应用程序作为gem发布并部署它?

时间:2013-04-19 08:26:38

标签: deployment gem sinatra rack

我有一个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?或者我完全错了?

1 个答案:

答案 0 :(得分:2)

暂时忽略path-issuesI 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