Синатра и Бандлер - PullRequest
       50

Синатра и Бандлер

1 голос
/ 03 августа 2010

Я пытаюсь настроить 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"

Затем я создал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

Пока все хорошо, так что в следующий раз я набрал 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

Вот простой MyApp.rb, который вызовет ту же ошибку

get '/' do
  erb :index
end

Что происходит не так?(

Ответы [ 3 ]

9 голосов
/ 04 августа 2010

Если вы указываете Rack run MyApp, вам нужно сначала определить класс MyApp (что вы должны делать внутри MyApp.rb). Получите ваш класс от Sinatra :: Base, чтобы сделать его Sinatra-Rack-App, который можно запустить с config.ru:

require 'sinatra/base'
class MyApp < Sinatra::Base
  get '/' do
    erb :index
  end
end

См. Также README Sinatra о модульных приложениях Sinatra (ищите абзац с именем «Модульные приложения» в http://github.com/sinatra/sinatra/)

0 голосов
/ 23 сентября 2011

В качестве альтернативы созданию модульного приложения (упаковка методов Sinatra в класс, расширяющий Sinatra::Base), вы можете использовать:

run Sinatra::Application

в файле config.ru вместо

run MyApp

Это может быть лучше, если вы хотите сохранить простой код Синатры.

См. документы для получения дополнительной информации .

0 голосов
/ 19 сентября 2011

Дополнительно вы можете иметь свой my_app.rb следующим образом:

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'

И ваш config.ru вот так:

require './my_app'
run Rack::URLMap.new '/' => Sinatra::Application

Надеюсь, это поможет.

С наилучшими пожеланиями

ED

...