【发布时间】:2018-02-28 14:34:56
【问题描述】:
在将 Sinatra 应用程序添加到现有 Rails 应用程序时,我遇到了一个我希望比我更有经验的人可以轻松解决的问题。
我目前有一个大型 Rails 单体,我计划将其拆分为一个由 JSON API 支持的 SPA。由于在 API 完成之前我仍然需要支持单体应用程序,因此我想在现有的 Rails 应用程序中安装 API(用 Sinatra 编写),因为我将功能移植过来,目标是在几个月内删除 Rails 应用程序本身。我在 Rails 中安装 Sinatra 应用程序而不是将其设置为单独服务的原因是,我希望在两者之间轻松共享代码,因为我打算在迁移完成后继续使用 ActiveRecord 作为我在 Sinatra 中的 ORM。
我已经在 Rails 应用程序中安装了 Sinatra 模型,使用 Rails routes.rb 文件没有任何问题:
Rails.application.routes.draw do
mount API::Core, at: '/api'
...
end
我没有对 config.ru 做任何工作,因为在 routes.rb 文件中安装 API 似乎符合我的需要。如果我需要做更多的工作才能让它正常运行,那不是问题。
sinatra 应用程序的入口点也相当简单,只需加载几个控制器来分割路由:
require 'sinatra/base'
require 'sinatra/json'
require_relative 'controllers/first_controller'
require_relative 'controllers/second_controller'
module API
class Core < Sinatra::Base
register Sinatra::FirstControllerApi
register Sinatra::SecondControllerApi
end
end
我遇到的问题是我对 Sinatra 的预期,但我无法充分利用我的 google-fu 来找到解决方案。 Rails 会按预期自动重新加载每个更改/请求的代码,但 Sinatra 不会。每次我更改 Sinatra API 中的控制器代码时,我都需要重新启动整个 Rails 服务器以提供新内容。由于我的开发环境在 docker 容器中运行,因此每次启动可能需要一段时间并且变得很麻烦。
对于自动重新加载安装在 Rails 应用程序中的 Sinatra 应用程序的问题,是否有一个“规范”的解决方案,还是我只是让问题过于复杂?我知道 Sinatra 有一些适用于这个领域的宝石,但我没有看到任何关于如何让它们在这种“奇怪”边缘情况下工作的信息。
如果您需要更多信息,请告诉我,希望我已经提供了足够的信息,以便有人理解我的问题。
【问题讨论】:
标签: ruby-on-rails ruby sinatra