在Rails中使用Rack gem

时间:2013-09-27 18:47:55

标签: ruby-on-rails ruby gem rack

我正在尝试使用我刚刚在Rails项目中编写的一个愚蠢的小型Rack gem,但每当我调用它时,我都会遇到uninitialized constant错误。这让我感到疯狂,因为我之前已经already written Rack gems,并且那些在我的Rails项目中工作得很好。

在我的Gemfile中:

gem 'hide_heroku', :git => 'https://github.com/ykessler/hide-heroku'

在我的application.rb中:

module Tester
  class Application < Rails::Application

    config.middleware.use Rack::HideHeroku

但是启动我的本地服务器,我得到:

  

未初始化的常量Rack :: HideHeroku(NameError)

宝石:

module Rack

  class HideHeroku

    def initialize(app)
      @app=app
    end

    def call(env)
      @status, @headers, @response = @app.call(env)
      @request = Rack::Request.new(env)
      [@status, _apply_headers, @response]
    end

    private

      def _apply_headers
        if /\.herokuapp\.com\/?.*/ =~ @request.url
          @headers['X-Robots-Tag'] = 'noindex, nofollow'
        end
        @headers
      end

  end

end

请在此处查看:https://github.com/ykessler/hide-heroku

1 个答案:

答案 0 :(得分:2)

这里的问题可能是项目的结构。你需要在gem中有一个lib/hide_heroku.rb文件,它可以引导gem,或者你需要在gem行上指定require路径,如下所示:

gem 'hide_heroku', :git => 'https://github.com/ykessler/hide-heroku', :require => "rack/hide_heroku"

(或者您可以在应用中require 'rack/hide_heroku')。

当您致电Bundler.setup时,Bundler将尝试要求宝石的名称,但如果您没有使用该文件结构,则无法找到要包含的文件。