2

我有一个 Sinatra 应用程序,我想开始在 Rails 中构建新功能,同时仍然支持现有的 Sinatra 功能。我尝试了以下策略:

  1. sinatra 的 rackup 将一些请求路由到 rails 和一些到 sinatra
  2. sinatra 的机架包括导轨
  3. rails 的 rackup 包括 sinatra。

我的许多搜索结果都是 rails 3,而不是 4。此外,Rails是否必须生成数据库而不是使用 Sinatra 使用的数据库(在这种情况下,是 Sequel gem 来访问 Sqlite3。)总的来说,我得到的错误是关于宝石和路径。(尽管我确实重新捆绑并尝试了不同版本的路径。)

关于在仍支持现有 Sinatra 应用程序的同时使用 Rails 4 的最佳方式有什么建议吗?

4

2 回答 2

5

我认为 Rails/Rack 集成代码在 Rails 3 和 4 之间没有太大变化,所以你应该没问题。Rails on Rack 指南更详细地解释了您可以config.ru为 Rails 应用程序创建一个文件,如下所示:

require ::File.expand_path('../config/environment',  __FILE__)

use Rack::Debugger
use Rack::ContentLength
run Rails.application

然后 runningrackup config.ru将启动一个运行您的 rails 应用程序的机架服务器。

这个问题的答案指出,如果您从 Rack 运行 Rails 和 Sinatra,而不是将您的 Sinatra 应用程序安装在 Rails 的routes.rb文件中,则对您的 Sinatra 应用程序的请求根本不会通过 Rails。答案还表明,config.ru您应该能够这样做以支持您的 Sinatra 和 Rails 应用程序:

map "/" do
  run RailsApp::Application
end

map "/url1" do
  run SinatraApp1
end

当然,您必须修改路由和应用程序名称以匹配您的需求和应用程序。

我建议您首先通过一个 config.ru 运行您的应用程序,然后再询问有关您的数据库的另一个问题,更详细地解释您希望数据库设置是什么以及您收到的确切错误消息是什么。

于 2013-11-04T01:30:51.500 回答
1

Rails 不需要创建数据库,甚至不需要直接使用数据库。要在没有 ActiveRecord 的情况下生成新的 Rails 应用程序,请运行rails new APP_PATH --skip-active-record. 然后,不是直接从 Rails 应用程序使用数据库,而是向 Sinatra 应用程序发送请求,让 Sinatra 应用程序控制与数据库相关的所有内容。

于 2013-11-04T01:24:44.900 回答