Подтвердить что ты не робот

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

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

4b9b3361

Ответ 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