最近、アプリに 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/.
gollumを機能させるには、ルートから「wiki」ディレクトリを作成し、git init .
そこで実行する必要があります
$ mkdir wiki
$ cd wiki
$ git init .
私が今抱えている問題は、これが認証やレイアウトなどのアプリの他のすべての機能を持たない単純なgollumのマウントであることです。どのユーザーがどのコミットを実行したかを反映する方法については、まだ作業中です。
今のところ、それはすべてサーバーの git アカウントの下にあります。補足として、 gollum-libを使用してgollumをアプリに統合する方が少し簡単に思えますが、フロントエンド機能を再実装する必要があります。
編集:ルートでDeviseを使用して認証を機能させます。
authenticate :user do
mount Precious::App, at: 'gollum'
end
ただし、これには、Devise がまだ認証されていない gollum のルートにルーティングしようとするため、redirect_loop を取得し続けるという小さな問題が伴います。サインインページにリダイレクトされるように修正しようとしています。それまでは、認証されていないユーザーが wiki にアクセスすることを望まないため、これは私のユース ケースに役立ちます。
また、gollum でコミットごとに正しい作成者を取得する方法を追加session["gollum.author"]
し、情報を渡すために使用します。カスタムコントローラーの構成に従ってDeviseからセッションコントローラーを作成することでこれを行いました
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 はキーを文字列に変更します。したがって、session['gollum.author'] Hash をシンボル キーで取得するには、最後のハックを 1 つ行う必要があります。
この投稿に従って、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