Sinatra和Bundler

Tom*_*Tom 1 ruby rack rubygems sinatra bundler

我正在尝试安装Bundler,这样我就可以将我的Sinatra应用程序部署到具有所有正确宝石的服务器上.

我已经创建了我的Gemfile

source :gemcutter
gem 'sinatra', '1.0'
gem "nokogiri", "1.4.2"
gem "rack",  "1.1.0"
gem "dm-core",  "1.0.0"
gem "dm-migrations",  "1.0.0"
gem "dm-sqlite-adapter",  "1.0.0"
gem "pony", "1.0"
Run Code Online (Sandbox Code Playgroud)

接下来我创建了一个Config.ru

require 'rubygems'
require 'bundler'
Bundler.setup

require 'sinatra'
require 'dm-core'
require 'dm-migrations'
require 'dm-sqlite-adapter'
require 'open-uri'
require 'nokogiri'
require 'csv'
require 'pony'
require 'parsedate'
require 'digest/md5'

require 'MyApp'
run MyApp
Run Code Online (Sandbox Code Playgroud)

到目前为止一直很好,所以接下来我跑了bundle install并且得到了'Bundle Complete'所以现在我需要做的只是Rackup

然后我得到:

config.ru:18: undefined local variable or method `MyApp' for #<Rack::Builder:0x1227350 @ins=[]> (NameError)
from /usr/local/lib/ruby/gems/1.8/gems/rack-1.1.0/lib/rack/builder.rb:46:in `instance_eval'
from /usr/local/lib/ruby/gems/1.8/gems/rack-1.1.0/lib/rack/builder.rb:46:in `initialize'
from config.ru:1:in `new'
from config.ru:1
Run Code Online (Sandbox Code Playgroud)

这是一个简单的MyApp.rb,它会触发相同的错误

get '/' do
  erb :index
end
Run Code Online (Sandbox Code Playgroud)

出了什么问题?:(

Zar*_*ony 9

如果您告诉Rack run MyApp,您需要先定义MyApp类(您应该在MyApp.rb中执行此操作).从Sinatra :: Base派生你的班级,使其成为可以从config.ru运行的Sinatra-Rack-App:

require 'sinatra/base'
class MyApp < Sinatra::Base
  get '/' do
    erb :index
  end
end
Run Code Online (Sandbox Code Playgroud)

另请参阅Sinatra关于模块化Sinatra应用程序的自述文件(在http://github.com/sinatra/sinatra/上搜索名为"模块化应用程序"的段落)