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?
Trả lời
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
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ý.
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
+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
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/ –
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