【问题标题】:How do I mount a standalone Rack app into a Ruby On Rails app?如何将独立的 Rack 应用程序安装到 Ruby On Rails 应用程序中?
【发布时间】:2018-07-21 20:35:19
【问题描述】:

我有一个正在运行的 Rails 应用程序。然后,我有一个小脚本,我想挂载到 Rails 应用程序 - 这是script

require 'as2'
require 'rack'

As2.configure do |conf|
  ...
end

handler = As2::Server.new do |filename, body|
  ...
end

MyBuilder = Rack::Builder.new do
  use Rack::CommonLogger
  map '/as2' do
    run handler
  end
end

puts "As2 version: #{As2::VERSION}"

我正在研究如何将 Rack 应用安装到 Rails 应用,我应该这样做:

MyRailsApp::Application.routes.draw do
  mount MySinatraApp.new => '/api'
end

但是,我遇到的问题是 - Rack 应用程序的标识符 (ID) 是什么?如何设置以及如何连接这两个应用并成功将它们挂载在一起?

提前谢谢你。

编辑:当我将文件(我在上面发布的 sn-p)放置到 /lib 文件夹时 - 文件名 as2_server.rb 并我放的路线如下:

Rails.application.routes.draw do
  ...
  mount MyBuilder.new => '/as2'
end

我收到以下错误:

uninitialized constant MyBuilder (NameError)

我应该如何(在哪里)正确注册MyBuilder rack 应用程序?

【问题讨论】:

    标签: ruby-on-rails ruby routes rack mount


    【解决方案1】:

    我认为您缺少的唯一部分是需要您的 Rack 应用程序。

    所以,总而言之,我会:

    • 将您的脚本放在 lib/my_builder.rb 中
    • 创建配置/initializers/my_builder.rb
    • require Rails.root.join('lib/my_builder') 添加到新的初始化程序中
    • 在 config/routes.rb 中使用 mount MyBuilder, at: "/my_builder" 挂载

    【讨论】:

      猜你喜欢
      • 2020-03-27
      • 1970-01-01
      • 1970-01-01
      • 2014-07-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多