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