5

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

4

1 回答 1

2

现在忽略路径问题,这是我解决它的方法:

该应用程序捆绑为 gem tubemp,.

AGemfile安装并包含 gemified 应用程序:

gem 'tubemp'

运行 gemified 应用程序的A 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

这两个文件是制作新机架应用程序所需的全部内容,其中包括 gemified Sinatra 应用程序,因此可以通过 nginx、passenger 或简单rackup的 .

于 2013-05-01T10:20:57.157 回答