公式に書く予定もありますが、なんとなく下書きしてみます。

手始めに公式のプロジェクト lokka/lokka をチェックアウトして、手元で以下のパッチを当てていきます。

Pumaで動くようにする

ついでにdm-postgres-adapterに依存してしまうことも防いどきます。

diff --git a/Gemfile b/Gemfile
index 78cfcd7..9fc2fdc 100644
--- a/Gemfile
+++ b/Gemfile
@@ -45,6 +45,8 @@ gem 'mimemagic'
 Dir["public/plugin/lokka-*/Gemfile"].each {|path| eval(open(path) {|f| f.read }) }

 group :production do
+  gem 'puma'
+  gem 'dm-mysql-adapter', '1.2.0'
 end

 group :development, :test do
@@ -65,9 +67,5 @@ group :test do
 end

 group :mysql do
-  gem 'dm-mysql-adapter', '1.2.0'
-end
-
-group :postgresql do
-  gem 'dm-postgres-adapter', '1.2.0'
+  # gem 'dm-mysql-adapter', '1.2.0'
 end

これで bundle install してGemfile.lockさんも更新してコミット。

dummyの bin/rails を作る

起動コマンドが bin/rails server -e production -p 80 になるので、そのコマンドをrackupにリダイレクトするようなシェルスクリプトを置いて chmod a+x しておく。一緒に、各種環境変数を調整しておくと吉。

こーゆー感じです。

#!/bin/bash
# mode: shell

export LANG="ja_JP.UTF-8"
export TZ="Asia/Tokyo"
export RUBYOPT="--encoding=UTF-8:UTF-8"

if test -f /var/app/.env; then
  source /var/app/.env
fi

case "$1" in
  server)
    export RACK_ENV=production
    cd /var/app/current
    exec bundle exec rackup -s Puma --port 80
    ;;
esac

database.yml を作る

DATABASE_URL を認識するようにする。デフォルトでgitignoreされているのでgit add -fなりで強制追加する。

development:
  dsn: sqlite3://<%= root %>/db/development.sqlite3
test:
  dsn: <%= ENV['DATABASE_URL'] || "sqlite3://#{root}/db/test.sqlite3" %>
production:
  dsn: "<%= ENV['DATABASE_URL'] %>"

seed fileをちょこっと直す

puts が、うまく標準出力をつかまないようで、動かない。 $stderr.puts ならいいのかもしれないし、きっといずれマネクラ側で対応します...。

diff --git a/db/seeds.rb b/db/seeds.rb
index 1137f63..9021a38 100644
--- a/db/seeds.rb
+++ b/db/seeds.rb
@@ -5,33 +5,33 @@ Site.create!(:title => "Test Site",
              :dashboard => %q(<p>Welcome to Lokka!</p><p>To post a new article, choose "<a href=""/admin/posts/new"">New</a>" under "Posts" on the menu to the left. To change the title of the site, cho
ose "Settings" on the menu to the left. (The words displayed here can be changed anytime through the "<a href=""/admin/site/edit"">Settings</a>" screen.)</p>),
              :theme => "jarvi",
              :created_at => created_at,
-             :updated_at => updated_at) && puts("site was successfully created") if Site.all.blank?
+             :updated_at => updated_at) if Site.all.blank?

 User.create!(:name => "test",
              :hashed_password => "6338db2314bba79531444996b780fa7036480733",
              :salt => "2Z4H4DzATC",
              :permission_level => 1,
              :created_at => created_at,
-             :updated_at => updated_at) && puts("user was successfully created") if User.all.blank?
+             :updated_at => updated_at) if User.all.blank?

 Entry.create!(:user_id => 1,
               :title => "Test Post",
               :body => "<p>Welcome to Lokka!</p><p><a href=""/admin/"">Admin login</a> (user / password : test / test)</p>",
               :type => "Post",
               :created_at => created_at,
-              :updated_at => updated_at) && puts("entry was successfully created") if Entry.all.blank?
+              :updated_at => updated_at) if Entry.all.blank?

 Snippet.create!(:id => 1,
                 :name => "Test Snippet",
                 :body => "Text for test snippet.",
                 :created_at => created_at,
-                :updated_at => updated_at) && puts("snippett was successfully created") if Snippet.all.blank?
+                :updated_at => updated_at) if Snippet.all.blank?

 Tag.create!(:id => 1,
-            :name => "lokka") && puts("tag was successfully created") if Tag.all.blank?
+            :name => "lokka") if Tag.all.blank?

 Tagging.create!(:id => 1,
                 :taggable_id => 1,
                 :taggable_type => "Entry",
                 :tag_context => "tags",
-                :tag_id => 1) && puts("tagging was successfully created") if Tagging.all.blank?
+                :tag_id => 1) if Tagging.all.blank?

テーマの中で変な挙動をする点をなおす

具体的には多重エスケープや、フォームオブジェクトに必要な変数がないなどある。

diff --git a/public/theme/jarvi/entry.erb b/public/theme/jarvi/entry.erb
index 54b198d..1fae1b7 100644
--- a/public/theme/jarvi/entry.erb
+++ b/public/theme/jarvi/entry.erb
@@ -3,7 +3,7 @@
     <h2 class="title"><a href="<%= url(@entry.link) %>"><%= @entry.title %></a></h2>
   </div>
   <div class="body">
-    <%= @entry.body %>
+    <%= @entry.body.html_safe %>
   </div>
   <div class="footer">
     <div class="created_at"><%= l(@entry.created_at, :format => :long) %></div>

diff --git a/public/theme/jarvi_mobile/entry.erb b/public/theme/jarvi_mobile/entry.erb
index b467749..10e4989 100644
--- a/public/theme/jarvi_mobile/entry.erb
+++ b/public/theme/jarvi_mobile/entry.erb
@@ -8,7 +8,7 @@
 </div>
   </div>
   <div class="body">
-    <%= @entry.body %>
+    <%= @entry.body.html_safe %>
   </div>
 <% if logged_in? %>
     <p><a href="<%= url(@entry.edit_link) %>"><%= t('edit') %></a></p>
@@ -36,6 +36,7 @@
   <% end %>

   <div class="form">
+    <%  @comment = Comment.new %>
     <%= comment_form %>
   </div>
 </div>

これは本家にプルリクしたい気持ちもありつつ、お待ちください。

パワードバイロリポップにする

みんな頼む!!1

diff --git a/public/theme/jarvi/layout.erb b/public/theme/jarvi/layout.erb
index f927f30..87a67c1 100644
--- a/public/theme/jarvi/layout.erb
+++ b/public/theme/jarvi/layout.erb
@@ -50,7 +50,7 @@
     </div>
     <div id="footer">
       <div class="copy"><%= link_to @site.title, url('/') %></div>
-      <div class="poweredby wide">powered by <%= link_to 'Lokka', 'http://lokka.org' %></div>
+      <div class="poweredby wide">powered by <%= link_to 'Lokka', 'http://lokka.org' %> && <%= link_to 'ロリポップ!マネージドクラウド', 'https://mc.lolipop.jp/' %></div>
     </div>
     <%= footer %>
   </body>

diff --git a/public/theme/jarvi_mobile/layout.erb b/public/theme/jarvi_mobile/layout.erb
index 551161a..b104cdf 100644
--- a/public/theme/jarvi_mobile/layout.erb
+++ b/public/theme/jarvi_mobile/layout.erb
@@ -80,6 +80,7 @@
     <div id="footer">
       <div class="copy"><a href="<%= url('/') %>"><%= @site.title %></a></div>
       <div class="poweredby">powered by <a href="http://lokka.org/">Lokka</a></div>
+      <div class="poweredby">...and <a href="https://mc.lolipop.jp/">ロリポップ!マネージドクラウド</a></div>
       <div class="switch"><a href="?theme=pc">PC Theme</a></div>
     </div>
     <%= footer %>

上記について、一通りコミットしてpush可能にする。

以下は、マネージドクラウドにsshログインして実施。

ビルドスクリプトをカスタマイズする

/var/app/user_command.sh というファイルが存在すると、 git push の時のビルドコマンドを置き換えることができるのである。

以下のようなファイルを作る。

#!/bin/sh

export NOKOGIRI_USE_SYSTEM_LIBRARIES=1
export RAILS_ENV=production
export RACK_ENV=production

bundle install --deployment --without development,test --path vendor/bundle
# 管理画面とにらめっこして頑張って組み立ててくれ!!1
export DATABASE_URL="mysql://special-tenjin-3563_XXXXX:Y0ur_Password@mysql-1.mc.lolipop.lan/special-tenjin-3563_YYYYY"
bundle exec rake db:setup

echo 'export DATABASE_URL="mysql://special-tenjin-3563_XXXXX:Y0ur_Password@mysql-1.mc.lolipop.lan/special-tenjin-3563_YYYYY"' > /var/app/.env

あとは git push lolipop master する

ビルド成功まで待つ。


これで、 https://youahosu.lolipop.io/ にアクセッすると、やや待ってからのち、Lokkaのデフォルトの画面が上がると思うので、管理画面に入ってユーザパスワードを変更し、あとは普通に更新してください。

こういうノリで、 sinatra や hanami のアプリケーションも本当は動くとおもいます。

何かあれば、取り急ぎ、ツイラーでリプライください。

Enjoy!!1

Recent Entries