【问题标题】:How to mount a Sinatra app in a Padrino app?如何在 Padrino 应用程序中安装 Sinatra 应用程序?
【发布时间】:2013-01-03 01:24:57
【问题描述】:

Resque/Sidekiq 带有一个 Web 前端,它是一个 Sinatra 应用程序。

在 Rails 应用程序中安装它的方法是将它添加到路由 (http://railscasts.com/episodes/366-sidekiq?view=asciicast):

mount Sidekiq::Web, at: "/sidekiq"

如何在 Padrino 应用程序中安装它? 像其他 Rack 应用程序一样在 config.ru 中映射它不起作用

map '/sidekiq' do
  run Sidekiq::Web
end

【问题讨论】:

    标签: ruby sinatra rack padrino


    【解决方案1】:
    1. gem 'sidekiq' 添加到 Gemfile
    2. bundle install
    3. 将以下行添加到config/boot.rb

      Padrino.before_load do
        Padrino.dependency_paths << Padrino.root('app/workers/*.rb')
      end
      
    4. 将以下行添加到config/apps.rb

      require 'sidekiq/web'
      
      Padrino.mount('Sidekiq', app_class: 'Sidekiq::Web', app_root: Sidekiq::Web.root).to('/sidekiq')
      
    5. app/workers/中创建任意worker

    6. 运行bundle exec sidekiq -r ./config/boot.rb

    【讨论】:

      【解决方案2】:

      Padrino 应用是一个机架应用,在 config.ru 你会看到

      require ::File.dirname(__FILE__) + '/config/boot.rb'
      run Padrino.application
      

      您可以将其更改为使用 Rack::URLMap

      require ::File.dirname(__FILE__) + '/config/boot.rb'
      run Rack::URLMap.new("/sidekiq" => Sidekiq::Web.new, "/app" => Padrino.application.new)
      

      【讨论】:

      • 如果我使用 padrino s 启动服务器,这不起作用。 URLMap 仅在我使用 rackup 启动服务器时才有效。
      【解决方案3】:

      Padrino 使用 Padrino.mount,它期望应用程序响应依赖项和 setup_application。此 hack (https://gist.github.com/1718723) 允许您在 Padrino 应用程序中安装 Sinatra 应用程序

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-03-25
        • 2012-06-22
        • 2015-07-30
        • 1970-01-01
        相关资源
        最近更新 更多