jekyllをheroku(w/unicorn)で動かす
himynameisjonas/jekyll-heroku-unicorn を参考に設定します。
バージョンは ruby 2.0.0 jekyll 1.4.2 です。
Gemのインストール
ruby '2.0.0' #herokuでruby 2.0を利用にするために設定 gem 'jekyll' gem 'rack-jekyll', github: 'adaoraul/rack-jekyll', ref: '6a4b832c5b2350c8c1263b534ebf02135deb6363' gem 'unicorn'
unicorn.rbの作成
unicornの設定ファイルを作成します。(細かい説明は端折ります)
worker_processes 1 timeout 30 preload_app true
config.ruの作成
config.ruを作成します。
require "bundler/setup" Bundler.require(:default) run Rack::Jekyll.new(:destination => '_site')
_config.ymlの設定
jekyllの_config.ymlファイルに以下のように (サイトに必要のない)不要なファイルを表示します。
exclude: ["vendor",".rbenv-version", ".gitignore", "README.md", "Gemfile", "Gemfile.lock", "Procfile", "unicorn.rb", "config.ru"]
※vendor
を入れないと、herekuでサーバを立ち上げる時に
「Post 0000-00-00-welcome-to-jekyll.markdown.erb does not have a valid date. (Jekyll::FatalException)」のエラーが発生します。
Procfileの作成
herokuで起動するためにProcfileを作成します。
web: bundle exec unicorn -p $PORT -c ./unicorn.rb
$ foreman start
で起動することが確認できればOK
$ foreman start 01:07:26 web.1 | started with pid 83446 01:07:27 web.1 | I, [2013-12-29T01:07:27.402502 #83447] INFO -- : Refreshing Gem list 01:07:28 web.1 | Configuration file: /***/****/_config.yml 01:07:28 web.1 | I, [2013-12-29T01:07:28.181070 #83447] INFO -- : listening on addr=0.0.0.0:5000 fd=9 01:07:28 web.1 | I, [2013-12-29T01:07:28.181171 #83447] INFO -- : worker=0 spawning... 01:07:28 web.1 | I, [2013-12-29T01:07:28.183126 #83447] INFO -- : master process ready 01:07:28 web.1 | I, [2013-12-29T01:07:28.184675 #83582] INFO -- : worker=0 spawned pid=83582 01:07:28 web.1 | I, [2013-12-29T01:07:28.189126 #83582] INFO -- : worker=0 ready
herokuの作成と開始
ここからはいつものherokuの開始と同じ。
$ git init $ git add . $ git commit -m ‘first commit’ $ heroku create $ git push heroku master $ heroku open
で、うまく行けばxxxx.herokuapp.comで表示できるかと思います。
qiitaの記事はこちら
jekyllのmarkdownにカスタムタグを定義する
jekyllのmarkdownで独自の記法を定義して、特定のhtmlを出力したい。
処理概要
Jekyll::Converters::Markdown::***Parserクラスのconvertメソッドを拡張し、 convertをかける前に、特定の記法を変換する。
pluginの作成
_plugin/extendMd.rb
というファイルを作り、以下の様なコードを記述します。
※この例ではRedcarpetParserの拡張になっていますが、別のparserを使う場合はそのクラスを指定して下さい
module Jekyll module Converters class Markdown class RedcarpetParser alias :old_convert :convert def convert(content) # ここにコンバート処理を記述 old_convert(content) end end end end end
変換処理ケース1: smallタグを出力したい
--
(ハイフン2つ)をsmallタグとして出力。
—-small text
→<small>small text</small>
def convert(content) # small word content.gsub! /(^|\s)(--\w+)/ do "#{$1}<small>#{$2}</span>" end old_convert(content) end
変換処理ケース2:Twitterの埋め込みを出力したい
[tweet:https://twitter.com/kt_Biz/status/414717821034041344]
という形式の記法の出力をTwitterの埋め込みとして表示する場合。
def convert(content) # parse embed tweet content.gsub! /(\[tweet:https:\/\/twitter\.com\/\w+\/status\/[[:digit:]]+\])/ do "<blockquote class=\"twitter-tweet\" lang=\"en\"><a href=\"#{$1}\"></a></blockquote><script async src=\"//platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>" end old_convert(content) end
カスタマイズしたい場合はこちらを参考 → 埋め込みツイート | Twitter Developers
という感じで、markdownに独自の記法を追加することができます。お試しあれ。
qiitaの記事はこちら
jekyllでslimを使う
rubyでできた、ブログ、静的ページ生成ツールjekyll(ジキル)でテンプレートエンジンslimを使う方法。
jekyll-slimのインストール
gem 'jekyll-slim'
でbundle install
プラグインの読み込み
rootディレクトリに_plugins/bundler.rb
を作成し、内容を以下のようにする。
require 'rubygems' require 'bundler/setup' Bundler.require(:default)
htmlファイルをslimに置き換える
_layouts/default.html等を.slimにリネームし、マークアップをslim形式に変更する。
参考: Slim - A Fast, Lightweight Template Engine for Ruby
テンプレートを読み込む
_includesディレクトリにあるテンプレートを読み込みたい場合は通常のinclude
の部分をslim
に置き換えます
#footer | {% slim footer.slim %}
hamlでやる場合もだいたい同じ。
Yahoo!の日本語形態素解析APIのgemを作ってみた
前回のキーフレーズ抽出のgemに続き、 Yahoo!が提供している 日本語形態素解析APIのgemを作りました。
kyohei8/yahoo_parse_api · GitHub
yahoo_parse_api | RubyGems.org | your community gem host
インストール
Gemfileに以下を追加
gem 'yahoo_parse_api'
そして bundle install
またはgemを直接インストール
$ gem install yahoo_parse_api
設定
アプリケーションIDをYahooから取得して、 以下の用に設定
require 'yahoo_parse_api' YahooParseApi::Config.app_id = [application_ID]
使い方
YahooParseApi::Parse
をnewして、parse
メソッドを呼び出します。
- 第一引数に解析したい文字列、
- 第二引数にリクエストパラメータをハッシュ形式で指定します。(リクエストパラメータについてはこちらをご参考下さい)
- 第三引数にはリクエスト方法(
:GET
か:POST
)を指定します。指定しない場合はGETリクエストになります。 - 戻り値はXML形式のレスポンスをハッシュにして返しています。
parse_api = YahooParseApi::Parse.new # GET Request result = parse_api.parse('庭には二羽ニワトリがいる。', { results: 'ma,uniq', uniq_filter: '9|10' }) # => {"ResultSet"=>{ # "ma_result"=>{ # "total_count"=>"8", # "filtered_count"=>"8", # "word_list"=>{"word"=>[{"surface"=>"庭", "reading"=>"にわ", "pos"=>"名詞"}, # {"surface"=>"に", "reading"=>"に", "pos"=>"助詞"}, # {"surface"=>"は", "reading"=>"は", "pos"=>"助詞"}, # {"surface"=>"二羽", "reading"=>"にわ", "pos"=>"名詞"}, # {"surface"=>"ニワトリ", "reading"=>"にわとり", "pos"=>"名詞"}, # {"surface"=>"が", "reading"=>"が", "pos"=>"助詞"}, # {"surface"=>"いる", "reading"=>"いる", "pos"=>"動詞"}, # {"surface"=>"。", "reading"=>"。", "pos"=>"特殊"}]}}, # "uniq_result"=>{ # "total_count"=>"8", # "filtered_count"=>"4", # "word_list"=>{"word"=>[{"count"=>"1", "surface"=>"いる", "reading"=>nil, "pos"=>"動詞"}, # {"count"=>"1", "surface"=>"ニワトリ", "reading"=>nil, "pos"=>"名詞"}, # {"count"=>"1", "surface"=>"二羽", "reading"=>nil, "pos"=>"名詞"}, # {"count"=>"1", "surface"=>"庭", "reading"=>nil, "pos"=>"名詞"}]}}, # "schemaLocation"=>"urn:yahoo:jp:jlp http://jlp.yahooapis.jp/MAService/V1/parseResponse.xsd"}} # POSTリクエストの場合 result = yp.parse('庭には二羽ニワトリがいる。', { results: 'ma,uniq', uniq_filter: '9|10' }, :POST) # => {"ResultSet"=>... # リクエストパラメータのサンプル result = yp.parse('庭には二羽ニワトリがいる。', { results: 'ma', ma_response: 'surface', ma_response: '2|5' })
リクエストする文字数について
渡す文字列ですが、公式の仕様にはリクエストは100KBまでと書いてあるが実際には13,000文字(38KB)くらいで 制限に引っかかってしまいます。(このへんがどういう計算なのかわからない・・・)。