2009-11-10 27 views
35

Tôi tự hỏi làm thế nào người ta có thể sử dụng Bundler với Sinatra. Ý tưởng là sử dụng các gem mà Bundler tải bên trong thư mục .gems.Sinatra + Bundler?

+3

Yehuda Katz có một bài viết tuyệt vời về việc sử dụng bundler hôm nay: http: // yehudakatz .com/2009/11/03/using-the-new-gem-bundler-today/ –

+1

Ngoài ra, tài liệu về bundler cũng có một ví dụ tốt về cách thiết lập ứng dụng sinatra http://gembundler.com/sinatra.html và nó là hiện tại. – christophercotton

Trả lời

10

Tôi tin rằng cách tốt nhất được mô tả here trên EngineYard blog:

# 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 
47

Bên trong ứng dụng Sinatra của bạn, bạn chỉ cần yêu cầu cài đặt bundler:

require "bundler/setup" 
require "sinatra" 

get "/" do 
    "Hello world!" 
end 

Ngoài ra, nếu bạn không muốn thêm thêm require "bundler/setup" ở phía trên cùng của ứng dụng, bạn thay vì có thể gọi Sinatra qua số bundle exec (ví dụ: bundle exec ruby myapp.rb)

Giả định rằng bạn có Gemfile trong thư mục gốc của đơn đăng ký. Nó có thể trông như thế này:

source "http://rubygems.org" 

gem "sinatra" 

này cũng giả định rằng bạn đã cài đặt bundler (gem install bundler) và rằng bạn chạy bundle install để cài đặt tất cả các phụ thuộc đá quý.

+2

nếu bạn sử dụng Bundler.require: mặc định không cần phải tự yêu cầu 'sinatra' hoặc các loại đá quý khác – makevoid

+0

http://bundler.io/v1.3/sinatra.html – khelll

9

Như câu trả lời ban đầu của tôi đã khá cũ nhưng có vẻ là vẫn quan tâm đến chủ đề này, đây là phiên bản mới nhất của bundler/thiết lập Sinatra mà sẽ bao gồm hầu hết các trường hợp sử dụng:

Một tối thiểu config.ru

require './my_sinatra_app' 
run MySinatraApp 

Một môi trường env.rb tập tin đó yêu cầu tất cả các đá quý kèm (cũng hỗ trợ tải nhóm môi trường hiện tại của):

require 'bundler/setup' 

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

Bundler.require :default, APP_ENV.to_sym 

Sau đó, tập tin ứng dụng của bạn (yêu cầu môi trường) với ứng dụng của bạn Sinatra (Sinatra::Base):

require_relative 'env' 

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

Bắt đầu máy chủ phát triển của bạn với rackup và Sinatra sẽ được tải qua Bundler, ứng dụng của bạn sẽ có thể truy cập từ http://localhost:9292.

$ rackup 

hoặc bundle exec rackup nếu cần

Hãy chắc chắn rằng bạn có một Gemfile như một sau đây và bạn hãy chạy lệnh bundle trước khi bắt đầu ứng dụng

source "https://rubygems.org" 

gem "sinatra" 

gem "puma" # a better rack server than the default webrick 
7

+1 cho guide on the bundler website, nhưng nếu bạn có một ứng dụng đơn giản và sử dụng dsl của Sinatra ở cấp cao nhất, sau đó bạn cần phải làm như sau:

in y Gemfile của chúng tôi (nói bundler không đòi hỏi Sinatra):

gem 'sinatra', :require => false 

và trong hồ sơ của ứng dụng (yêu cầu rõ ràng Sinatra):

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

get '/' do 
    'hello world' 
end