質問
Sinatra で Bundler をどのように使用できるのか疑問に思っています。このアイデアは、Bundler が .gems フォルダー内にダウンロードした gem を使用することです。
解決 2
最善の方法が説明されていると思います ここ 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
他のヒント
あなたのシナトラアプリの内部では、あなただけのバンドラのセットアップを必要とする必要があります:
require "bundler/setup"
require "sinatra"
get "/" do
"Hello world!"
end
アプリの一番上に追加require "bundler/setup"
を追加したくない場合は、あるいは、あなたが代わりにbundle exec
経由シナトラを呼び出すことができます(例えばbundle exec ruby myapp.rb
)
これは、あなたのアプリケーションのルートにGemfile
を持っていることを前提としています。それは次のようになります。
source "http://rubygems.org"
gem "sinatra"
これはまた、あなたがすべての宝石の依存関係をインストールするgem install bundler
実行されたことをすでにバンドラ(bundle install
)をインストールしていることを前提とします。
私のオリジナルの答えはかなり古いでしたが、それでもこの話題に関心があるように思われるここでのユースケースのほとんどをカバーしますバンドラ/シナトラセットアップの最新バージョンだとして:
は、最小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::Base
)とアプリのファイル(環境を必要とする):
require_relative 'env'
class MyApp < Sinatra::Base
get "/" do
"hello world"
end
end
あなたのアプリは HTTPからアクセスできるようになり、rackupと開発サーバーを起動し、シナトラはバンドラーによってロードされます:// 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がありますが、シンプルなアプリを持っているし、使用している場合シナトラさんトップレベルのDSL、その後、あなたは次のことを行う必要があります:
あなたのGemfileに(シナトラを必要としないバンドラを伝える):
gem 'sinatra', :require => false
とアプリケーションのファイルに(明示的にシナトラが必要です):
require 'rubygems'
require 'bundler'
Bundler.require
require 'sinatra'
get '/' do
'hello world'
end
シナトラアプリケーションでバンドラを使用するには、2つのだけのことを行う必要があります。まず、Gemfileを作成します。
gem 'sinatra'
すると、それはあなたのシナトラアプリをロードする前にバンドルをロードするために、あなたのconfig.ruファイルを設定します。
require 'rubygems'
require 'bundler'
Bundler.require
require './my_sinatra_app'
run MySinatraApp
rackupと開発サーバーを起動し、シナトラはバンドラーによってロードされます。
rackup