【问题标题】:how to make a sinatra app run in rails 4?如何使 sinatra 应用程序在 Rails 4 中运行?
【发布时间】:2013-11-04 01:15:35
【问题描述】:

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

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

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

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

【问题讨论】:

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


    【解决方案1】:

    我认为 Rails/Rack 集成代码在 Rails 3 和 4 之间没有太大变化,所以应该没问题。 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 运行您的应用程序,然后再询问有关您的数据库的另一个问题,更详细地解释您希望数据库设置是什么以及您的确切错误消息是什么得到是。

    【讨论】:

    • 谢谢。我实现并且现在一直收到此错误: /rails 处的 RuntimeError 您必须在应用程序的配置中设置 config.secret_key_base。 (我确实在 application.rb 中设置了一个密钥。)
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-07-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-01
      • 1970-01-01
      相关资源
      最近更新 更多