Синатра + Комплектация?
Вопрос
Мне интересно, как можно использовать Bundler с Sinatra.Идея состоит в том, чтобы использовать драгоценные камни, которые Bundler загружает внутри папки .gems .
Решение 2
Я считаю, что описан наилучший способ здесь в блоге engineeryard:
# 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
Другие советы
Внутри вашего приложения Sinatra вам просто нужно запросить настройку bundler:
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"
Это также предполагает, что вы уже установили bundler (gem install bundler
) и что ты побежал bundle install
чтобы установить все зависимости gem.
Поскольку мой первоначальный ответ был довольно старым, но, похоже, этой теме все еще уделяется внимание, вот последняя версия bundler / sinatra setup, которая будет охватывать большую часть вариантов использования:
Минимальный 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
+1 для руководство на веб-сайте bundler, но если у вас простое приложение и вы используете dsl Sinatra на верхнем уровне, то вам нужно сделать следующее:
в вашем Gemfile (скажите, что bundler не требует sinatra):
gem 'sinatra', :require => false
и в файле приложения (явно требуется sinatra):
require 'rubygems'
require 'bundler'
Bundler.require
require 'sinatra'
get '/' do
'hello world'
end
Чтобы использовать bundler с приложением Sinatra, вам нужно сделать только две вещи.Сначала создайте Gemfile.
gem 'sinatra'
Затем настройте свой файл config.ru для загрузки пакета до того, как он загрузит ваше приложение Sinatra.
require 'rubygems'
require 'bundler'
Bundler.require
require './my_sinatra_app'
run MySinatraApp
Запустите свой сервер разработки с помощью rackup, и Sinatra будет загружена через Bundler.
rackup