Синатра + Бандлер? - PullRequest
       53

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

37 голосов
/ 10 ноября 2009

Мне интересно, как можно использовать Bundler с Синатрой. Идея состоит в том, чтобы использовать гемы, которые Bundler загружает в папку .gems.

Ответы [ 5 ]

47 голосов
/ 11 ноября 2009

Внутри вашего приложения Sinatra вам просто нужно настроить пакет:

require "bundler/setup"
require "sinatra"

get "/" do
  "Hello world!"
end

В качестве альтернативы, если вы не хотите добавлять дополнительные require "bundler/setup" вверху своего приложения, вы можете вместо этого вызывать sinatra через bundle exec (например, bundle exec ruby myapp.rb)

Предполагается, что у вас есть Gemfile в корне вашего приложения. Это может выглядеть так:

source "http://rubygems.org"

gem "sinatra"

Это также предполагает, что вы уже установили упаковщик (gem install bundler) и что вы запустили bundle install для установки всех зависимостей гемов.

11 голосов
/ 13 ноября 2009

Я считаю, что лучший способ описан здесь в блоге EngineYard:

# This makes sure the bundled gems are in our $LOAD_PATH
require File.expand_path(File.join(File.dirname(__FILE__), 'vendor', 'gems', 'environment'))

# This actually requires the bundled gems
Bundler.require_env

class MyApp < Sinatra::Base
  # stuff
end
10 голосов
/ 22 июля 2010

Поскольку мой первоначальный ответ был довольно старым, но, кажется, все еще внимание к этой теме, вот последняя версия настройки bundler / sinatra, которая будет охватывать большую часть сценария использования:

Минимальный config.ru

require './my_sinatra_app'
run MySinatraApp

Файл среды env.rb, для которого требуются все связанные гемы (также поддерживается загрузка группы текущей среды):

require 'bundler/setup'

APP_ENV = ENV["RACK_ENV"] || "development"

Bundler.require :default, APP_ENV.to_sym

Затем файл вашего приложения (требующий среды) с приложением sinatra (Sinatra::Base):

require_relative 'env'

class MyApp < Sinatra::Base
  get "/" do
    "hello world"
  end
end

Запустите ваш сервер разработки с Rackup, и Sinatra будет загружен через Bundler, ваше приложение будет доступно с http://localhost:9292.

$ rackup

или bundle exec rackup при необходимости

Убедитесь, что у вас есть Gemfile, подобный следующему, и вы запускаете команду bundle перед запуском приложения

source "https://rubygems.org"

gem "sinatra"

gem "puma" # a better rack server than the default webrick
8 голосов
/ 21 декабря 2010

+ 1 для руководства на веб-сайте комплектующего , но если у вас простое приложение и вы используете dsl Sinatra на верхнем уровне, вам необходимо выполнить следующее:

в вашем Gemfile (скажите, что упаковщик не требует sinatra):

gem 'sinatra', :require => false

и в файле приложения (явно требуется sinatra):

require 'rubygems'
require 'bundler'
Bundler.require
require 'sinatra'

get '/' do
  'hello world'
end
0 голосов
/ 21 марта 2018

Чтобы использовать пакет с приложением Sinatra, вам нужно сделать только две вещи. Сначала создайте Gemfile.

gem 'sinatra'

Затем настройте файл config.ru для загрузки пакета перед загрузкой приложения Sinatra.

require 'rubygems'
require 'bundler'

Bundler.require

require './my_sinatra_app'
run MySinatraApp

Запустите сервер разработки с помощью стойки, и Sinatra будет загружаться через Bundler.

rackup

Документация по исходному пакету

...