最近,我尝试将 Gollum 挂载到我的应用程序上。这是我的 routes.rb 的代码
require 'gollum/app'
Rails.application.routes.draw do
wiki_options = {:universal_toc => false}
Precious::App.set(:gollum_path, Rails.root.join('wiki').to_s)
Precious::App.set(:default_markup, :markdown) # set your favorite markup language
Precious::App.set(:wiki_options, wiki_options)
mount Precious::App, at:'gollum'
end
我可以使用访问整个咕噜http://localhost:3000/gollum/.
我必须从根目录创建一个“wiki”目录并在git init .
那里做一个让咕噜工作
$ mkdir wiki
$ cd wiki
$ git init .
我现在遇到的问题是,这是一个简单的咕噜安装,没有我的应用程序中的所有其他功能,如身份验证和布局。仍在研究如何反映哪个用户执行哪个提交。
到目前为止,它都在服务器 git 帐户下。在旁注中,使用gollum-lib将gollum集成到我的应用程序似乎更容易一些,但我必须重新实现前端功能。
编辑:所以我通过在我的路线中使用设计来进行身份验证。
authenticate :user do
mount Precious::App, at: 'gollum'
end
但这带来了一个小问题,即它不断获得 redirect_loop,因为 Devise 试图路由到尚未经过身份验证的 gollum 的根。我正在尝试修复它,以便它将重定向到登录页面。在那之前,它仍然适用于我的用例,因为我不希望未经身份验证的用户来到 wiki。
session["gollum.author"]
我还添加了一种方法,通过使用传递信息来为gollum 中的每个提交获取正确的作者。我通过在配置自定义控制器之后从设计创建会话控制器来做到这一点
class Users::SessionsController < Devise::SessionsController
# POST /resource/sign_in
def create
super do |resource|
session['gollum.author'] = { name: resource.name, email: resource.email }
end
end
# DELETE /resource/sign_out
def destroy
super { session['gollum.author'] = nil }
end
end
但是由于某些原因 session['gollum.author'] Hash 将键更改为字符串。所以我必须做 1 次最后的破解来获得 session['gollum.author'] 带有符号键的哈希。
我关注这篇文章并创建一个继承 Previous::App 的 App 类,并在我的 routes.rb 中进行更改
# config/routes.rb
require 'gollum/app'
class App < Precious::App
before { assign_author }
helpers do
def assign_author
session["gollum.author"].symbolize_keys!
end
end
end
Rails.application.routes.draw do
wiki_options = {:universal_toc => false}
App.set(:gollum_path, Rails.root.join('wiki').to_s)
App.set(:default_markup, :markdown)
App.set(:wiki_options, wiki_options)
authenticate :user do
mount App, at:'gollum'
end
end