おれせか

なんかそれっぽいのをうにうに。

github/gollum

まずはbundle installまで

プロジェクトのdirを適当につくってGemfileを作成。あとgit initもしとこう。

$ mkdir gollum
$ bundle init
$ git init

Gemfileを編集。

# A sample Gemfile
source "https://rubygems.org"

gem 'gollum'

# formats
gem 'redcarpet'
gem 'github-markdown'
gem 'wikicloth'

# capistranoとか
group :development do
  gem 'capistrano'
  gem 'capistrano-ext'
end

bundle installする

bundle install --path vendor/bundle

あ、そうそう、.gitignoreも適当につくっときましょう。

/.bundle
/vendor/bundle

とりあえずlocalでrackupできるとこまで。

config.ruをふわっと書く

#!/usr/bin/env ruby

require 'rubygems'
require 'gollum'
require 'gollum/frontend/app'

use Rack::ShowExceptions

Gollum::Page.send :remove_const, :FORMAT_NAMES if defined? Gollum::Page::FORMAT_NAMES
Gollum::Page::FORMAT_NAMES = {
  :markdown  => "Markdown",
  :mediawiki => "MediaWiki"
}

Precious::App.set(:gollum_path, repos_path)
Precious::App.set(:default_markup, :markdown) 
Precious::App.set(:wiki_options,  {universal_toc: true})

run Precious::App

rackup (ッターン!

$ bundle exec rackup
[2012-12-21 19:36:14] INFO  WEBrick 1.3.1
[2012-12-21 19:36:14] INFO  ruby 1.9.3 (2012-11-10) [x86_64-darwin11.4.2]
[2012-12-21 19:36:14] INFO  WEBrick::HTTPServer#start: pid=22609 port=9292

"localhost:9292"で確認できたよー。わーい。

よし。capistranoでdeployするぞう。

このままcap deployする方向ですすめるとdeployするたびにwikiのデータがぶっ飛ぶというダメwikiになってしまうので、wikiのデータ用のレポジトリは分けましょうそうしましょう。

config.ruで別レポジトリがなければ作る的な処理を追加。

#!/usr/bin/env ruby

require 'rubygems'
require 'gollum'
require 'gollum/frontend/app'

use Rack::ShowExceptions

# reposがなければ作ればいいじゃない
repos_path = File.join(Dir.pwd, 'wiki.git')
unless File.exists? repos_path
  Dir::mkdir(repos_path)
end
unless File.exists? File.join(repos_path, '.git')
  Grit::Repo.init(repos_path)
end

Gollum::Page.send :remove_const, :FORMAT_NAMES if defined? Gollum::Page::FORMAT_NAMES
Gollum::Page::FORMAT_NAMES = {
  :markdown  => "Markdown",
  :mediawiki => "MediaWiki"
}

Precious::App.set(:gollum_path, repos_path)
Precious::App.set(:default_markup, :markdown) 
Precious::App.set(:wiki_options,  {universal_toc: true})

run Precious::App

.gitignoreもちょっと修正

/.bundle
/vendor/bundle
/wiki.git
/public

んで、"capify ."して編集するなり、ゼロから書くなりでconfig/deploy.rbを用意。

#encoding: utf-8

# capistrano-ext
require "capistrano/ext/multistage"

# bundler
require "bundler/capistrano"
set :bundle_flags, "--deployment"

####################################################
# Application
####################################################
set :application, "gollum"
set :keep_releases, 5 # releasesに残すverの数


####################################################
# Deploy user
####################################################
set :use_sudo, false
default_run_options[:pty] = true 


#####################################################
# Git
#####################################################
set :scm, :git
set :scm_verbose, true
set :repository, "git+ssh://path/to/hoge.git"

####################################################
# Task
####################################################
namespace :deploy do
  after 'deploy:setup' do
    sudo "chmod -R o+w #{deploy_to}"
    run "mkdir -m 777 #{shared_path}/wiki.git"
  end

  after 'deploy:create_symlink' do
    run <<-CMD
      cd #{release_path};
      rm -fr #{release_path}/public &&
      ln -nfs `bundle show gollum`/lib/gollum/frontend/public/gollum #{release_path}/public
    CMD
    run <<-CMD
      rm -fr #{release_path}/wiki.git &&
      ln -nfs #{shared_path}/wiki.git #{release_path}/wiki.git
    CMD
  end

  task :start, :roles => :app do
    run "touch #{current_release}/tmp/restart.txt"
  end

  task :stop, :roles => :app do
  end

  desc "Restart Application"
  task :restart, :roles => :app do
    run "touch #{current_release}/tmp/restart.txt"
  end

  # restart後にcleanup
  after "deploy:start", "deploy:cleanup"
  after "deploy:restart", "deploy:cleanup"
end

特に必要性ないけどいつものかんじでcapistrano-ext使ってるのでconfig/deploy/**.rbもつくる。とりあえず今回はproduction.rbにするべ。

#encoding: utf-8

####################################################
# Application
####################################################
set :deploy_to, "/path/to/dir" #deploy先
set :rails_env, 'production' # いらんかも

#####################################################
# Servers
######################################################
server 'hoge.net', :web, :app
role :db,  "#{roles[:app].first}", :primary => true

#####################################################
# Git
#####################################################
set :branch, 'master'

で、ひとまずdeployはまだ置いておいてサーバのほうの設定しましょう

apacheとpassengerをすでに入ってるってことでインスコとかの説明割愛。

apacheの設定にごにょごにょ追加。

<VirtualHost *:80>
    ServerName wiki.hoge.net

    ErrorLog logs/wiki_error_log
    CustomLog logs/wiki_access_log combined

    DocumentRoot /path/to/dir/gollum/current/public
    <Directory "/path/to/dir/gollum/current/public">
        Options FollowSymLinks -Includes -ExecCGI -Indexes -MultiViews
        AllowOverride All
        Order allow,deny
        Allow from all
    </Directory>

    RackBaseURI /
    RailsEnv production
</VirtualHost>

んでapache再起動

$ sudo apachectl restart

よっしゃーdeployだー

初回だけまずは必要なdirやらfile作成

$ bundle exec cap production deploy:setup

問題なくsetup完了したらコードをポポポポーン。
あ、もちろんココまでに適宜gitにcommitはしててremoteにpushまで済んでるってことで。

$ bundle exec cap production deploy

わーい。できたよー。

PAGETOP

android sdkなんかはすでに入ってる前提。あとmac lion。

sublime androidをインストール

Sublime Android

cloneしてPackagesディレクトリにつっこむ。

$ git clone git://gitorious.org/sublime-android/sublime-android.git
$ mv sublime-android ~/Library/Application Support/Sublime Text 2/Packages/

もしかしたらPackage Controlで入れれたりしたのかもしんないけど。

設定いじいじ

まずは、 Packages/sublime-android/ 内の「Android (OSX).sublime-settings」を直接か Packages/Users/ 内にコピーしてから、自分の環境にあわせて設定。

{
  "jdk_bin": "/usr",
  "ant_bin": "/usr/bin",
  "default_android_project_dir": "/path/to/workspace",
  "android_sdk": "/path/to/sdk",
  "last_apk_path": "",
  "last_package_name": ""
}

"jdk_bin"は「bin/java」があるディレクトリを指定。"ant_bin"は「ant」があるディレクトリを指定。"android_sdk"は普通にsdkのディレクトリ(toolsやらplatform-toolsがあるとこ)を指定。

プロジェクト作ってみる

メニューバーから[Tools]->[Android]->[New project]をポチッとな。

  • Project name:
  • Activity name:
  • Package name:
  • Project path:

と順に聞かれるので適宜入力。

  • 次にすでに入っているplatformからbuild targetを選択する。

※なので、事前に[Tools]->[Android]->[SDK Tools]->[Launch Android SDK Manager]で必要なものだけ入れといたほうがいいとおも。

projectの設定みてみる

さっきの「Project path」で入力した箇所にhello worldプロジェクトが作成されてる。
この時点でCmd+bでBuildしてみるとビルドしてインスコまで完了する。(実機接続されてれば実機に)

ちなみにCmd+bした時に「Buildfile: build.xml does not exist!」みたいなこと言われる場合は

  • build.xml (antでbuildするのに必要。いろいろ書いてある)
  • ant.properties (antのデフォ値を上書きしたいときに使うっぽい。デフォでは空)
  • local.properties (ant関連の各自のlocal環境の値を書くファイルっぽい。デフォだとsdkのpathが書いてる)
  • project.properties (project毎の設定が書いてある。eclipseでの開発時でもおなじみ)

このへんのどれかのファイルを選択してる状態で押すとだいじょぶなはず。

インスコ後に起動までしたいよう

eclipseだとbuild->インスコ->起動までしてくれるんだし、こっちでもそうしたいなーってことでちょっといじる。

ぐーぐる先生に聞いてみたところ、

$ adb shell am start -a android.intent.action.MAIN -n [パッケージ名]/.[Activity名]

shellではこれを叩けばいけるらしい。

というわけで、これを叩くantコマンドを追加しよう。
で、build.xmlをふわっと見てみるとカスタムするなら「custom_rules.xml」ての追加って手もあると。

じゃあそうしてみようというわけでcustom_rules.xmlを追加。

<?xml version="1.0" encoding="UTF-8"?>
<project name="custom_rules" default="help">
    <target name="run">
        <exec executable="adb">
            <arg value="shell"/>
            <arg value="am"/>
            <arg value="start"/>
            <arg value="-a"/>
            <arg value="android.intent.action.MAIN"/>
            <arg value="-n"/>
            <arg value="${start.activity}"/>
        </exec>
    </target>
</project>

で、↑でつこてる「start.activity」変数をproject.propertiesに追加して、パッケージ名とアクティビティ名をそのプロジェクトのものにする。

start.activity=com.hoge/.MainActivity

ここまで出来たらshell上で、build.xmlがあるディレクトリにて

$ ant run

てすれば起動はできるようになってる。

あとはこれを一連のbuildの流れの最後に追加すればOKということに。
実際のbuild時の処理は Packages/sublime-android/Android.sublime-build に書いてあるのでここをいじる。
※Packages/Users/に入れたらデフォを上書きできるかなーと思ったら出来なかったので直接いじるしかなさそう。

Android.sublime-buildのosxの箇所で

"osx":
{
  "cmd": ["ant", "uninstall", "&&", "ant", "debug", "install", "run"],  // <- 最後にrunを追加!
  "working_dir": "$project_path",
  "target": "android_build_install"
},

"cmd"の最後に"run"を追加する。

ここまで出来たらCtrl+bでのビルド時にbuild->インスコ->起動までしてくれるようになってる。ヤッター!

あれれ。antのログで日本語が出ないぞう。

ここまではOKだったけど、ビルド時にエラーが発生したりで日本語ログが出てるはずの際にsublime text2のログウィンドウでは

[Decode error - output not utf-8]

が表示されて日本語が消え去ってる。

ググったところ、以下の解決法をみつけた。
macでantのメッセージが文字化けする - 作業ノート

なるほどなるほど。というわけで自分の場合は.zshrcに

export ANT_OPTS=-Dfile.encoding=UTF8

と追記してみたら、shell上で「ant debug install run」とか実行する分には日本語が化けることなく表示されるようになったけど、sublime上では相変わらず。

そっかーshellとsublimeで環境引き継いでるわけじゃないもんなー、てなわけでわりとザックリな方法で対応。

前述のAndroid.sublime-buildのosxのcmdを変更。

"osx":
{
  "cmd": ["ANT_OPTS=-Dfile.encoding=UTF8", "ant", "uninstall", "&&",
              "ANT_OPTS=-Dfile.encoding=UTF8", "ant", "debug", "install", "run"],
  "working_dir": "$project_path",
  "target": "android_build_install"
},

わあい。日本語表示されたよーヾ(*´∀`*)ノキャッキャ

だいぶ横道にそれてる気もするけど最後にもすこし

あとまれによくあるbuild時になんでエラーになるんだろーな事態。そんなときはとりあえずプロジェクトをキレイキレイにしたいよね!

とりあえず、shellのプロジェクトdirで↓を叩けばOK。

$ ant clean

ほんとはsublimeのメニュー内に[Clean project]っての作ろうかとか考えてたけど、そこまですることないよねーって思ってやめた。

PAGETOP

たまにやって毎度忘れるのでメモ。

やった環境

capistrano-extは必要よねー。

gemのインストールとかは略

$ capify .

でCapfileとconfig/deploy.rbが作成される。

あとはレシピいじいじ

いま使ってるのはこんなかんじ。
https://gist.github.com/4064116

deploy:force_setupは既存のものがあったりでめんどくさい時にドッカーンてするやつ。


必要に応じて、config/deploy/*.rbをいじったり作ったり。
PAGETOP

Search