【问题标题】:Sinatra + Bundler?西纳特拉 + 捆绑器?
【发布时间】:2010-12-14 22:27:00
【问题描述】:

我想知道如何将 Bundler 与 Sinatra 一起使用。这个想法是使用 Bundler 在 .gems 文件夹中下载的 gem。

【问题讨论】:

标签: ruby sinatra bundler


【解决方案1】:

要将 bundler 与 Sinatra 应用程序一起使用,您只需要做两件事。首先,创建一个 Gemfile。

gem 'sinatra'

然后,设置您的 config.ru 文件以在加载 Sinatra 应用程序之前加载捆绑包。

require 'rubygems'
require 'bundler'

Bundler.require

require './my_sinatra_app'
run MySinatraApp

使用 rackup 启动您的开发服务器,Sinatra 将通过 Bundler 加载。

rackup

source bundler docs

【讨论】:

    【解决方案2】:

    由于我最初的答案已经很老了,但似乎仍然关注这个主题,这是最新版本的 bundler/sinatra 设置,它将涵盖大部分用例:

    最小的config.ru

    require './my_sinatra_app'
    run MySinatraApp
    

    一个环境env.rb文件,需要所有捆绑的gem(也支持加载当前环境的组):

    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
    

    使用 rackup 启动您的开发服务器,然后 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
    

    【讨论】:

      【解决方案3】:

      我相信最好的方法是在 EngineYard 博客上描述的 here

      # 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
      

      【讨论】:

        【解决方案4】:

        在您的 Sinatra 应用程序中,您只需要设置捆绑程序:

        require "bundler/setup"
        require "sinatra"
        
        get "/" do
          "Hello world!"
        end
        

        或者,如果您不想在应用顶部添加额外的require "bundler/setup",则可以改为通过bundle exec 调用sinatra(例如bundle exec ruby myapp.rb

        这假设您在应用程序的根目录中有一个Gemfile。它可能看起来像这样:

        source "http://rubygems.org"
        
        gem "sinatra"
        

        这还假设您已经安装了 bundler (gem install bundler) 并且您运行了 bundle install 来安装所有 gem 依赖项。

        【讨论】:

        • 如果你使用 Bundler.require :defaults 则不需要手动 require 'sinatra' 或其他 gems
        【解决方案5】:

        guide on the bundler website+1,但如果您有一个简单的应用程序并在顶层使用 Sinatra 的 dsl,那么您需要执行以下操作:

        在您的 Gemfile 中(告诉 bundler 不需要 sinatra):

        gem 'sinatra', :require => false
        

        在应用程序的文件中(明确需要 sinatra):

        require 'rubygems'
        require 'bundler'
        Bundler.require
        require 'sinatra'
        
        get '/' do
          'hello world'
        end
        

        【讨论】:

          猜你喜欢
          • 2015-09-15
          • 2015-08-20
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2010-10-07
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多