【发布时间】:2011-04-21 12:23:32
【问题描述】:
我想将 Nesta CMS 应用程序“挂载”到 Rails3 应用程序上 这应该可能是因为 Nesta 是一个 Sinatra 应用程序,它应该是一个可机架安装的层,......但是你会怎么做呢? 你将从哪里开始?有没有人有这方面的经验?推荐的文档?
【问题讨论】:
标签: content-management-system ruby-on-rails-3 blogs sinatra rack
我想将 Nesta CMS 应用程序“挂载”到 Rails3 应用程序上 这应该可能是因为 Nesta 是一个 Sinatra 应用程序,它应该是一个可机架安装的层,......但是你会怎么做呢? 你将从哪里开始?有没有人有这方面的经验?推荐的文档?
【问题讨论】:
标签: content-management-system ruby-on-rails-3 blogs sinatra rack
嘿卢卡。我一直想写这篇文章一两个月。您只需使用 Rails Metal 将 Nesta 安装为 Rack 应用程序。
看看这个:
http://railscasts.com/episodes/222-rack-in-rails-3
您可以通过将 Nesta::App 称为 Nesta::App 在您的路线中引用它(我只在一周左右之前将允许您执行此操作的提交合并到 master 中,所以请确保您是与 github 上的最新代码保持同步)。为了实现这一点,您需要做的就是要求 Nesta 的 app.rb 文件。
我自己还没有在 Rails 3 上尝试过这个,但我已经用 Rails 2 做了一段时间了。如果您有任何问题,请在邮件列表 (nesta@librelist.com) 上联系我。
对于想知道如何使用 Rails 2.3 实现相同功能的人,我一直在使用如下代码(在 lib/nesta_metal.rb 中):
require File.join(File.dirname(__FILE__), *%w[.. vendor nesta app])
class NestaMetal
def initialize(app)
@app = app
end
def call(env)
status, headers, response = Nesta::App.call(env)
(status == 404) ? @app.call(env) : [status, headers, response]
end
end
干杯,
格雷厄姆
【讨论】:
这是我用来让它在我的应用上运行的代码:
MyRailsApp::Application.routes.draw do
mount MyNestaSite.new => "/blog"
match '/' => "static#welcome" # and whatever other rails routes you want
end
当时它还需要来自 github 的最新版本的 Sinatra,因为通过 rubygems 提供的版本在处理环境变量方面存在错误,因此我将其添加到了我的 Gemfile:
gem "sinatra", :git => "http://github.com/sinatra/sinatra.git"
【讨论】: