如何让一个sinatra应用程序在rails 4中运行?

时间:2013-11-04 01:15:36

标签: ruby-on-rails ruby ruby-on-rails-4 sinatra

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

  1. sinatra的机架将一些请求路由到rails,一些请求路由到sinatra
  2. sinatra的机架包括rails
  3. rails'stackup包括sinatra。
  4. 我的许多搜索产生了rails 3,而不是4.另外,Rails 生成数据库而不是使用Sinatra使用的数据库(在这种情况下,Sequel gem访问Sqlite3。 )一般来说,我得到的错误是关于宝石和路径。 (虽然我确实重新绑定并尝试不同版本的路径。)

    关于在支持现有Sinatra应用程序的同时使用Rails 4的最佳方法的任何建议?

2 个答案:

答案 0 :(得分:5)

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

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

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

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

this question的答案指出,如果你从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运行您的应用,然后询问有关您的数据库的其他问题,更详细地解释您希望数据库设置是什么以及您确切的错误消息是什么得到了。

答案 1 :(得分:1)

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