Ruby on Rails で動く家計簿の導入メモ

はじめに

我が国には,なんと 2つも実用的な Ruby on Rails な家計簿 Web ツールがあります.

どちらがお勧めかというと,どちらもお勧めです.強いて言えば,面倒くさがり屋の方はさなたろうを,キッチリと正確につけていける人は小槌が合う気がします.ちなみに,私はダブルチェックのためにどちらも使っています.この話は次節で少し触れます.

さて,実際このような家計簿ツールはとても便利なのですが,Ruby on Rails とやらが使えないと動かないのです.私もさっぱりわからない*1ので,備忘録がてら Ubuntu 14.04 LTS Server へインストールするメモを残します.
想定する読者は,Linux サーバを建てたことがある人です.
目標は,

  • 家計簿さなたろうを apache2 経由で触れるようにする,
  • Web 家計簿 小槌を apache2 経由で触れるようにする,

としておきましょう.

家計簿さなたろう vs. Web 家計簿 小槌

別に VS しなくてもよいのですが,両者の(ぼくの感じることも含め)特徴を述べておきましょう.

機能 家計簿さなたろう Web 家計簿 小槌 雑感(感想?)
費目定義 食費とか光熱費とかの別です.自由に定義でき,どちらも問題なし
銀行口座定義 銀行口座の定義です.自由に定義でき,どちらも問題なし
現金対応 どちらも問題なし
銀行口座自由度 いずれも,EdySuiCaのような電子現金もチャージ(口座間振込orクレカ振込扱い)を用いれば銀行口座として扱えます.架空口座を起こして,給料日に,食費,服飾費…と当月の使途に応じて分けて管理するという,給料袋の小分けみたいなことも virtual な世界で実現出来ます.
クレジットカード対応 自動精算 精算ツールで手動採算 どちらもクレカに対応.しかし,精算の仕方が異なります.
残高調整機能 どちらも使途不明金の存在や,レシート紛失により,経過が分からなくなったときのために,残高を強制的に補正する仕組みがあります.
仕訳帳の入力 さなたろうでは,項目入力時に,過去の同一または似た入力を動的に表示&そのまま再利用する機能が備わっています.小槌にも似たような機能はありますが,候補が一件しかでません.小槌は,オプションで「貸し方」「借り方」表記(簿記式)の入力が可能です.
出納帳 さなたろうの出納帳は費目や収支表を動的にテーブル表示できます.一方,小槌は動的なテーブル表示ではないものの,十分な費目・収支表表示ができる他,貸借対照表などとマニアックな表も出力されます.
グラフ表示 どちらも,推移グラフと内訳円グラフが出ます.ややさなたろうの方が表示できる種類が多いものの,どちらも分析に用いれるほどのものではなく,参考程度です.
企業利用 × 小槌は,中小企業等で,資産管理や,社員の社費利用管理に利用できるとしています.例えば,簡単な経理への支払い要求などを管理できるようですが,使ったことがありません.さなたろうは,そもそもこのような利用を想定していません
家族間連携 × 小槌は,複数ユーザの連携機能を使い,お金の貸し借りを管理できます.しかしながら,ユーザの紐付けをDB上で行うところのロック制御がまだアマく,お金の貸し借りの合意形成中にユーザ間連携を解除したりすると,DBがおかしくなる問題がある気がします.

以上から,どちらも家計簿としては問題なく利用でき,やや Web 家計簿 小槌の方が,中小企業での利用を意識している分,お金を正確に扱おうとしています.

最後に,クレジットカードの精算方法の違いについて,詳しく触れておきましょう.

Web 家計簿 小槌のクレジットカード精算機能

家計簿 さなたろう のクレジットカード自動精算
Web 家計簿 小槌では,精算機能を使って手動でクレジットカード精算を行います.図の通り,チェックボタンを使い,当月精算の対象項目を選択しているわけですね.クレジットカードの利用頻度にもよりますが,私などは,月に4〜50件の買い物がありますので,大変面倒です.しかし,面倒ですが,クレジットカードの明細とつきあわせ,誤りを訂正しつつコミットしています.
一方,家計簿 さなたろうでは,クレジットカード登録の際に,毎月の締め日と精算日を定義できます.従って,「カード会社請求日⇒締め日算出⇒精算日決定」という処理が自動でなされ,自動的に精算日に出納帳に反映されます.しかしながら,「いつ買い物をしたか」=「カード会社請求日」ではありませんので,店舗のカード会社への請求遅れなどにより,実際の「カード会社請求日」が遅れ,精算月が遅くなるケースがあります.この場合は当然月次結果に誤りが生じます.
さらに,クレジットカード精算日を「毎月x日」という定義をしますので,当該日が休日であったとしても,その日に精算を行ってしまいます.通例,クレジットカード会社の引き落としは平日に行われますので,この場合も精算日がややずれることになります.同様に,買い物をした日が休日であった場合も当然カード会社請求日の遅れの原因となります.
家計簿 さなたろう では,自動精算機能により楽な家計簿ライフをおくる一方,正確性をやや欠きますし,その性格からカード明細書と照らし合わすのも難しいので,入力間違いに気づくことも難しいでしょう.
結論はなく,好みに応じて選択すればよいのではないでしょうか.

個人的には,Web 家計簿 小槌は男らしい作りだな,と思いました.(作成者は女性なのですが)

excuse

予めお断りしておきますが,前記の通り,私は Ruby on Rails とやらには詳しくありません.なので,冗長なことをやっていたり,間違っていたりするかもしれません.そのときはひっそり教えてくれるとうれしいです.

事前準備

ubuntu 14.04 LTS Serverインストール

Download Ubuntu Server | Download | Ubuntu から Ubuntu 14.04 LTS Server を取得.
とりあえず,OpenSSH Server だけ追加インストールしたミニマム構成で入れます.

システムアップデート
$ sudo apt-get update
$ sudo apt-get dist-upgrade -y
git インストール
% sudo apt-get install git
ruby インストール by rvm

ruby のセットを入れておきます.
Ubuntuリポジトリから ruby 1.9 をインストールしてもよいのですが,せっかくなので最新 stable を rvm で入れます.(参考)
わりと最近まで ruby-1.9.1 で動かしていた実績がありますので,ruby 1.9系でも問題ないでしょう.それこそ,Ubuntuリポジトリから apt-get で入れても OK です.後述の bundler さえ入っていればなんとでもなりそう.

$ sudo -s
# apt-get install curl
# curl -L https://get.rvm.io | bash -s stable
# source /etc/profile.d/rvm.sh
# rvm requirements
# rvm install ruby
# rvm use ruby --default 

curl は既に入っているかもしれません.

rubygems の bundler もいれておきます.

$ rvmsudo gem install bundler
MySQL インストール

今回はどちらの家計簿でも MySQL DB を使います.
途中,root pw を聞かれるので,適当に.

$ sudo apt-get install mysql-server libmysqlclient-dev

libmysqlclient-dev は,さなたろうや小槌で利用する mysql2 のビルドのために必要です.

さらに,PostgreSQL のインタフェイス用ライブラリも入れておきます.MySQL で動かすのに奇妙な話ですが,さなたろうインストール時に必要となるので仕方がありません.

$ sudo apt-get install libpq-dev

MySQLの設定としては,UTF-8をデフォルトにするくらいです.
/etc/mysql/my.cnf の [mysqld] 項目に一行追記します.

[mysqld]
#
# * Basic Settings
#
# 追記
character-set-server=utf8 

(修正箇所のみ記載)

apache インストール

apache2 をインストールしておきます.

$ sudo apt-get install apache2
passenger をインストール

家計簿さなたろうや Web 家計簿 小槌,どちらも利用しますので,先ほどインストールした rvm ruby な環境で入れてしまいます.

$ rvmsudo gem install passenger
略
Fetching: daemon_controller-1.2.0.gem (100%)
Successfully installed daemon_controller-1.2.0
Fetching: passenger-4.0.44.gem (100%)
Building native extensions.  This could take a while...
Successfully installed passenger-4.0.44
Parsing documentation for daemon_controller-1.2.0
Installing ri documentation for daemon_controller-1.2.0
Parsing documentation for passenger-4.0.44
Installing ri documentation for passenger-4.0.44
Done installing documentation for daemon_controller, passenger after 8 seconds
2 gems installed

その後,apache2 のモジュールを生成します.
各ソフトウェアの version とかは適当に読み替えてください.

$ sudo su -
# apt-get install libcurl4-openssl-dev
# apt-get install apache2-dev
# apt-get install libapr1-dev
# apt-get install libaprutil1-dev
# cd /usr/local/rvm/gems/ruby-2.1.2/gems/passenger-4.0.44/bin
# ./passenger-install-apache2-module
Welcome to the Phusion Passenger Apache 2 module installer, v4.0.44.

This installer will guide you through the entire installation process. It
shouldn't take more than 3 minutes in total.

Here's what you can expect from the installation process:

 1. The Apache 2 module will be installed for you.
 2. You'll learn how to configure Apache.
 3. You'll learn how to deploy a Ruby on Rails application.

Don't worry if anything goes wrong. This installer will advise you on how to
solve any problems.

Press Enter to continue, or Ctrl-C to abort.



--------------------------------------------

Which languages are you interested in?

Use <space> to select.
If the menu doesn't display correctly, press '!'

 &#8227; &#11042;  Ruby
   &#11042;  Python
   &#11041;  Node.js
   &#11041;  Meteor

コンパイル 略

--------------------------------------------
Almost there!

Please edit your Apache configuration file, and add these lines:

   LoadModule passenger_module /usr/local/rvm/gems/ruby-2.1.2/gems/passenger-4.0.44/buildout/apache2/mod_passenger.so
   <IfModule mod_passenger.c>
     PassengerRoot /usr/local/rvm/gems/ruby-2.1.2/gems/passenger-4.0.44
     PassengerDefaultRuby /usr/local/rvm/gems/ruby-2.1.2/wrappers/ruby
   </IfModule>

After you restart Apache, you are ready to deploy any number of web
applications on Apache, with a minimum amount of configuration!

Press ENTER to continue.


--------------------------------------------

Deploying a web application: an example

Suppose you have a web application in /somewhere. Add a virtual host to your
Apache configuration file and set its DocumentRoot to /somewhere/public:

   <VirtualHost *:80>
      ServerName www.yourhost.com
      # !!! Be sure to point DocumentRoot to 'public'!
      DocumentRoot /somewhere/public
      <Directory /somewhere/public>
         # This relaxes Apache security settings.
         AllowOverride all
         # MultiViews must be turned off.
         Options -MultiViews
         # Uncomment this if you're on Apache >= 2.4:
         #Require all granted
      </Directory>
   </VirtualHost>

And that's it! You may also want to check the Users Guide for security and
optimization tips, troubleshooting and other useful information:

  /usr/local/rvm/gems/ruby-2.1.2/gems/passenger-4.0.44/doc/Users guide Apache.html
  http://www.modrails.com/documentation/Users%20guide%20Apache.html

Enjoy Phusion Passenger, a product of Phusion (www.phusion.nl) :-)
https://www.phusionpassenger.com

Phusion Passenger is a trademark of Hongli Lai & Ninh Bui.

passenger-install-apache2-module を走らせる前の apt-get が上手くいかないときは,先に passenger-install-apache2-module を走らせるのも有りです.このツールはよく出来ていて,何が足りないかを指摘してくれることがあります.その指示通りにライブラリ等々をインストールしましょう.

続いて,apache2 に passenger の設定を組み込みます.
/etc/apache2/mods-available/passenger.load を作成します.

LoadModule passenger_module /usr/local/rvm/gems/ruby-2.1.2/gems/passenger-4.0.4\
4/buildout/apache2/mod_passenger.so

/etc/apache2/mods-available/passenger.conf を作成します.

<IfModule mod_passenger.c>
  PassengerRoot /usr/local/rvm/gems/ruby-2.1.2/gems/passenger-4.0.44
  PassengerDefaultRuby /usr/local/rvm/gems/ruby-2.1.2/wrappers/ruby
</IfModule>

これは,いずれも passenger インストールの際に指示されたものです.Ubuntu の場合は, Module load 部分と config を分けてかくのがお作法なので,わけました.
passenger モジュールを apache2 でロードしてみます.

$ sudo a2enmod passenger
Enabling module passenger.
To activate the new configuration, you need to run:
  service apache2 restart

あとは,apache2 を再起動してみたりして,エラーを吐いたりしていないか確認しましょう.

その他の事前準備

さなたろうや小槌は,Rails アプリですので,bundler というツールを使えば,一式のライブラリは自動的に導入されます.しかし,一部入らないものがあるため,以下を事前に入れておきます.

$ sudo apt-get install libxml2-dev libxslt1-dev
$ sudo apt-get install libqtwebkit-dev

libqtwebkit-dev を入れると芋づる式に大量のアプリケーションがインストールされます.実際のところ,これをインストールする過程で入る他のlibを使っているだけだと思うので,もっとコンパクトにインストールできるはずです.(参考)
この辺は,後日検証して加筆しようと思っています.

家計簿さなたろうインストール on Ubuntu 14.04 LTS Server

最新のソースコードを拾ってくる

どこでもよいので,git clone できるディレクトリを掘って,git clone します.

$ mkdir ~/git
$ cd ~/git/
$ git clone https://github.com/kaznum/sanataro.git
Cloning into 'sanataro'...
remote: Reusing existing pack: 12671, done.
remote: Counting objects: 5, done.
remote: Compressing objects: 100% (5/5), done.
remote: Total 12676 (delta 1), reused 0 (delta 0)
Receiving objects: 100% (12676/12676), 6.72 MiB | 1.63 MiB/s, done.
Resolving deltas: 100% (6385/6385), done.
Checking connectivity... done.

clone したものから archive をつくっておきます.

$ cd sanataro/
$ git archive --format=tar --prefix=sanataro/ HEAD | gzip > ../sanataro.tar.gz
展開する

/var/lib/rails/ 以下に配置したいと思います.
面倒なので,sudo su - してしまいます.以下,root での作業.

$ sudo su -
# mkdir /var/lib/rails
# cd /var/lib/rails/
# tar xvzf /home/hoge/git/sanataro.tar.gz
sanataro/
sanataro/.gitignore
sanataro/.gitmodules
sanataro/.travis.yml
sanataro/Gemfile
sanataro/Gemfile.lock
(略)
インストール

./sanataro/ で下記を実行.

# bundle config build.nokogiri --use-system-libraries
# bundle install --path=vendor/bundler
Don't run Bundler as root. Bundler can ask for sudo if it is needed, and
installing your bundle as root will break this application for all non-root
users on this machine.
Fetching source index from http://rubygems.org/
Fetching git://github.com/mqt/dalli-store-extensions.git
Installing rake 10.3.1
Installing i18n 0.6.9
Using json 1.8.1
(略)

早速,「root でやんなボケ」と言われます.お利口さんな諸兄はちゃんとやってください.

最初の bundle config build.nokogiri --use-system-libraries を忘れると,下記のようなメッセージがでます.

Building nokogiri using packaged libraries.
Building libxml2-2.8.0 for nokogiri with the following patches applied:
        - 0001-Fix-parser-local-buffers-size-problems.patch
        - 0002-Fix-entities-local-buffers-size-problems.patch
        - 0003-Fix-an-error-in-previous-commit.patch
        - 0004-Fix-potential-out-of-bound-access.patch
        - 0005-Detect-excessive-entities-expansion-upon-replacement.patch
        - 0006-Do-not-fetch-external-parsed-entities.patch
        - 0007-Enforce-XML_PARSER_EOF-state-handling-through-the-pa.patch
        - 0008-Improve-handling-of-xmlStopParser.patch
        - 0009-Fix-a-couple-of-return-without-value.patch
        - 0010-Keep-non-significant-blanks-node-in-HTML-parser.patch
        - 0011-Do-not-fetch-external-parameter-entities.patch
************************************************************************
IMPORTANT!  Nokogiri builds and uses a packaged version of libxml2.

If this is a concern for you and you want to use the system library
instead, abort this installation process and reinstall nokogiri as
follows:

    gem install nokogiri -- --use-system-libraries

If you are using Bundler, tell it to use the option:

    bundle config build.nokogiri --use-system-libraries
    bundle install

However, note that nokogiri does not necessarily support all versions
of libxml2.

For example, libxml2-2.9.0 and higher are currently known to be broken
and thus unsupported by nokogiri, due to compatibility problems and
XPath optimization bugs.
************************************************************************

その他,インストールに失敗すると,その理由が出てくるので,その通りに対処すれば基本的にOKです.

twitter-bootstrap-rails やらでメッセージが出ますが,読んでおいてください.

config ファイル修正と MySQL 準備

./sanataro/config/database.yml を記述して MySQL DB との整合性を持ちます.sample ファイルもありますが,sqlite3 の設定で書かれているので,MySQL DB を使うように書き直します.
database.yml

production:
  adapter: mysql2
  database: sanataro_production
  username: sanataro
  password: hogehogehoge
  encoding: utf8
  socket: /var/run/mysqld/mysqld.sock

ここでは, MySQL で定義する database 名を sanataro_production に,アクセスユーザ名を sanataro,パスワードを hogehogehoge としています.
これに合致するように,MySQLユーザと DB を登録しておきます.

# mysql -u root -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 68195
Server version: 5.5.34-0ubuntu0.13.04.1 (Ubuntu)

Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

ユーザと DB を作ります.

mysql> grant all privileges on sanataro_production.* to sanataro@localhost identified by 'hogehogehoge' with grant option;
Query OK, 0 rows affected (0.05 sec)
mysql> create database sanataro_production;
Query OK, 1 row affected (0.00 sec)

また,./sanataro/config/application.yml の production の項目に admin 設定と secret を書いておきます.

# bundle exec rake secret
44accfb097401e63570613963c7b0ae27eeda93ccdb812608dae39e7ab84c5e1f2f86c29f3291991fff2ef0dd94c07bc2bfad8009da2fa725d127b258ee94262
production:
  <<: *defaults
  item_list_count: 200
  admin_user: "admin"
  admin_password: "hogehogehoge"
  oauth_admin_user: "admin"
  oauth_admin_password: "hogehogehoge"
  secret_token: "44accfb097401e63570613963c7b0ae27eeda93ccdb812608dae39e7ab84c5e1f2f86c29f3291991fff2ef0dd94c07bc2bfad8009da2fa725d127b258ee94262"
インストール続き

DB の準備をします.今回は database.yml で production で動かすと宣言しているので,RAILS_ENV=production をしておきます.

# bundle exec rake RAILS_ENV=production assets:precompile RAILS_RELATIVE_URL_ROOT=/sanataro
# bundle exec rake db:migrate RAILS_ENV=production
== 1 CreateUsers: migrating ===================================================
-- create_table(:users, {})
   -> 0.1024s
== 1 CreateUsers: migrated (0.1038s) ==========================================

== 2 CreateItems: migrating ===================================================
-- create_table(:items, {})
   -> 0.1029s
== 2 CreateItems: migrated (0.1038s) ==========================================

== 3 CreateAccounts: migrating ================================================
-- create_table(:accounts, {})
   -> 0.1872s
(略)

# bundle exec rake RAILS_ENV=production assets:precompile RAILS_RELATIVE_URL_ROOT=/sanataro という命令を書いていますが,後述するとおり,apache2 経由でアクセスする際,http://xxxxxx/sanataro/ という形式でアクセスする際にRAILS_RELATIVE_URL_ROOT=/sanataro が必要です.http://sanataro.xxxxxx/ のようにアクセスするのであれば(要DNS設定), RAILS_RELATIVE_URL_ROOTを省略します.
(参考:http://kz-dev.info/archives/335 なぜか,ウイルスバスターくんが反応するのですが….)

動作テスト

とりあえず,起動だけしてみましょう.
./sanataro/bin/rails を使います.

# ./bin/rails s -e production
=> Booting WEBrick
=> Rails 4.1.1 application starting in production on http://0.0.0.0:3000
=> Run `rails server -h` for more startup options
=> Notice: server is listening on all interfaces (0.0.0.0). Consider using 127.0.0.1 (--binding option)
=> Ctrl-C to shutdown server
[2014-05-26 00:22:23] INFO  WEBrick 1.3.1
[2014-05-26 00:22:23] INFO  ruby 2.1.2 (2014-05-08) [x86_64-linux]
[2014-05-26 00:22:23] INFO  WEBrick::HTTPServer#start: pid=5698 port=3000

当該サーバの port 3000番にブラウザで接続して,それっぽく表示がちゃんとでれば動いていそうです.

あなたの予想に反して、このページが見えているでしょうか?

画像とかは,このようにきれいには出ないと思います.画像などのパスは /sanataro/以下になっているからです.ここでは気にせず先に進みましょう.

passenger による apache2 からの利用

事前準備の項にある, passenger をインストール済みという前提で進めます.
apache2 の設定にさなたろうを呼び出す設定を記述します.
このやり方には,二つのやり方があります.

  1. sanataro.hogehoge.jp のように,HTTPリクエストホストを apache2 に見分けさせ,/var/lib/rails/sanataro/public を呼び出す方法
  2. www.hogehoge.jp/sanataro/ のように,HTTPリクエストパスを apache2 に見分けさせ,/var/lib/rails/sanataro/public を呼び出す方法

前者では,sanataro.hogehoge.jp を名前解決できなくてはいけませんので,DNS等の設定をいじれる環境が必要です.
ここでは,後者の,HTTPリクエストパスを見分けて,/var/lib/rails/sanataro/public を呼び出す設定を記述することにします.

/etc/apache2/site-available/sanataro.conf を新たに作り,下記のように記述しておきます.

RackBaseURI /sanataro
<Directory /var/www/html/sanataro>
    Options -MultiViews
    Options -Indexes
</Directory>

ここで,/var/www/html は apache2 全体の DocumentRoot です.
続いて,/var/www/html/sanataro を /var/lib/rails/sanataro/public にリンクします.

$ sudo ln -s /var/lib/rails/sanataro/public /var/www/html/sanataro

apache2 に sanataro.conf を組み込みます.

$ sudo a2ensite sanataro
Enabling site sanataro.
To activate the new configuration, you need to run:
  service apache2 reload

あとは,apache2 をリスタートすれば,apache2 サーバ経由 http://xxxxxxxxx/sanataro/ でアクセスできるはずです.

さなたろう設定のツメ

その他,メールの設定などを済ませておきます.
/var/lib/rails/sanataro/config/environments/production.rb を修正します.
今回は,passenger により apache2 経由でアクセスすることから,メールに記載のURLが変更されます.

  # config.action_mailer.default_url_options = { host: "sanataro.example.com" }
  config.action_mailer.default_url_options = { host: "apache2の動いているサーバIP/sanataro" }

(修正箇所のみ記載)
前節で述べたとおり,apache2 サーバを経由するとき,HTTPリクエストパスの /sanataro を見分けてさなたろうを呼ぶことにしていますので,config.action_mailer.default_url_options の host 末尾に /sanataro をつけておきます.ドメインで判別しているときは,不要です.

また,メールを発着するための設定をしておきます.
同ファイルを下のように変更します.

  # config.action_mailer.delivery_method = :sendmail
  config.action_mailer.delivery_method = :smtp

  # 以下追記
  config.action_mailer.smtp_settings = {
    :address => 'mail.xxxxx.org',  # SMTPサーバFQDN
    :port => 465,                  # SMTPポート番号
    :domain => 'xxxxx.org',        # メールドメイン
    :user_name => 'hoge',          # from アカウント/認証ユーザ名 
    :password => 'password',       # 認証パス
    :authentication => :plain,     # 認証方式
    :tls  => true,                 # TLS 利用
    :enable_starttls_auto => false,# STARTTLS 不使用
    :openssl_verify_mode => 'none' # SSL証明書無視(ォィ
  }

(修正箇所のみ記載)
config.action_mailer.smtp_settings の記述は,Rails の ActionMailer に依存するので,各自でお調べください.gmail にタダのりする設定なども様々紹介されています.

ユーザ登録とログイン


トップ画面

ユーザ登録画面:「こちらをクリックするとアカウントを作成できます。」を進むとこの画面にたどり着く.
ユーザ登録をすると,指定したメールアカウントにメールが届きます.届かないときは,前節の設定が間違っているので,頑張って修正してください.

こんにちは! hogehogeさん!

この度は、「家計簿 さな太郎」にユーザ登録していただき、
ありがとうございます。
下記のURLにアクセスいただくことにより、ユーザ登録処理が完了します。

http://xxxxxxxxxxxx/sanataro/confirm_user?login=hogehoge&sid=ghWeNjYjM8XmHXY

是非、「家計簿 さな太郎」をご活用ください。

「家計簿 さな太郎」

このようなメールが届けばOKです.このURLをクリックして,登録を確定しましょう.

こんにちは! hogehogeさん!

この度は、「家計簿 さな太郎」にユーザ登録していただき、
ありがとうございます。
ユーザ登録処理が完了しました!

以下のURLからログインしてください。

http://xxxxxxxxxxxx/sanataro/

まず最初に・・・
メニューの「設定」で銀行口座、支出、収入の項目を設定してください!

是非、「家計簿 さな太郎」をご活用ください。

「家計簿 さな太郎」

どうやら,使えるようになったようですので,次へ進みます.


おめでとうございます! ありがとうございます.

ログイン


設定したアカウントでログインします.適当に仕訳帳に記入してみましょう.
このへんはマニュアルにお任せ.

ログの確認

おそらく,/var/lib/rails/sanataro/log/production.log にはログがはき出されていない,あるいは更新のではないでしょうか.
これは,apache2 権限でログを書き出そうとするのに,root や 一般ユーザの権限で管理されているからです.

$sudo chown -R /var/lib/rails/sanataro/{log,tmp}
トラブルシューティング: 画像など,一部のコンテンツが表示されない

apache2 の site-available/sanataro.conf に AllowOverride All のようなことをかくと,/var/lib/rails/sanataro/public_html/.htaccess が有効となります.
そうしますと,mod_rewrite が有効になっていれば,.htaccess の RewriteRule などが動いてしまいます.
不要であれば,.htaccess の RewriteEngin を off しておくとよいでしょう.

その他,http://xxxxxxx/sanataro/ のように設定しようとしているとき,インストール時の assets:precompile において RAILS_RELATIVE_URL_ROOT=/sanataro をつけわすれると,アイコンが出なかったりします.これは,asset ファイルのパスが /sanataro の部分をケアしてくれないためです.

「かんたん入力」が動きません

うごきません.参りましたね.
http://sanataro.xxxxxx/ みたいにHTTPリクエストホストを見てさなたろうを呼んでいるケースなら,./sanataro/public/dispatch.fcgi を書けばなんとかなります.

#!/usr/local/rvm/rubies/default/bin/ruby
ENV['RAILS_ENV'] ||= 'development'
ENV['GEM_HOME'] = "/usr/local/rvm/rubies/default/lib/ruby/gems/"
require 'fcgi'
require File.join(File.dirname(__FILE__), '../config/environment.rb')
class Rack::PathInfoRewriter
 def initialize(app)
   @app = app
 end
 def call(env)
   env.delete('SCRIPT_NAME')
   parts = env['REQUEST_URI'].split('?')
   env['PATH_INFO'] = parts[0]
   env['QUERY_STRING'] = parts[1].to_s
   @app.call(env)
 end
end
Rack::Handler::FastCGI.run Rack::PathInfoRewriter.new(Sanataro::Application)

これを 755 パーミッションとして,その上で,./sanataro/public_html/.htaccess で RewriteEngin On すればこのケースに限り動作した実績があります.
ただ,fcgi のインストールの仕方や,細々とした設定は忘れてしまったので,適宜 rails 関係でググってお調べいただきたい.(このdispatch.cgi のソースも,ひな形はどこからか拾ってきたものを修正したものなのだ….)

今回紹介した,http://xxxxxxxx/sanataro/ なアクセスではちょっと回避策がわかりません.

Web 家計簿 小槌 インストール on Ubuntu 14.04 LTS Server

家計簿 さなたろう と同様に Web 家計簿 小槌をインストールしていきます.

最新のソースコードを拾ってくる

どこでもよいので,git clone できるディレクトリを掘って,git clone します.

$ mkdir ~/git
$ cd ~/git/
$ git clone https://github.com/everyleaf/kozuchi.git
Cloning into 'kozuchi'...
remote: Reusing existing pack: 21411, done.
remote: Total 21411 (delta 0), reused 0 (delta 0)
Receiving objects: 100% (21411/21411), 15.09 MiB | 1.39 MiB/s, done.
Resolving deltas: 100% (8129/8129), done.
Checking connectivity... done.

clone したものから archive をつくっておきます.

$ cd kozuchi/
$ git archive --format=tar --prefix=kozuchi/ HEAD | gzip > ../kozuchi.tar.gz
展開する

/var/lib/rails/ 以下に配置したいと思います.
面倒なので,sudo su - してしまいます.以下,root での作業.

$ sudo su -
# mkdir /var/lib/rails
# cd /var/lib/rails/
# tar xvzf /home/hiehata/git/kozuchi.tar.gz
kozuchi/
kozuchi/.gitignore
kozuchi/.loadpath
kozuchi/.project
kozuchi/.rspec
kozuchi/.travis.yml
kozuchi/BSD-LICENSE
kozuchi/Gemfile
kozuchi/Gemfile.lock
略
config ファイル修正と MySQL 準備

./kozuchi/config/database.yml を記述して MySQL DB との整合性を持ちます.
さなたろうと同様に production 環境で動かすので,サンプル database.yml.sample からそこだけ修正します.
小槌は,デフォルトの DB として,MySQL を想定しています.

production:
  adapter: mysql2
  database: kozuchi_production
  username: kozuchi
  encoding: utf8
  password: hogehogehoge
  # socket: /tmp/mysql.sock
  # socket: /opt/local/var/run/mysql5/mysqld.sock # for MacPorts
  socket: /var/run/mysqld/mysqld.sock # for TravisCI

ここでは, MySQL で定義する database 名を kozuchi_production に,アクセスユーザ名を kozuchi,パスワードを hogehogehoge としています.
これに合致するように,MySQLユーザと DB を登録しておきます.

# mysql -u root -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 68195
Server version: 5.5.34-0ubuntu0.13.04.1 (Ubuntu)

Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

ユーザと DB を作ります.

mysql> grant all privileges on kozuchi_production.* to kozuchi@localhost identified by 'hogehogehoge' with grant option;
Query OK, 0 rows affected (0.01 sec)

mysql> create database kozuchi_production;
Query OK, 1 row affected (0.00 sec)
インストール

小槌ではこのまま bundle でインストール作業に入ってOKです.
/var/lib/rails/kozuchi/ にて作業します.

# bundle install --path=vendor/bundler
Don't run Bundler as root. Bundler can ask for sudo if it is needed, and
installing your bundle as root will break this application for all non-root
users on this machine.
Fetching gem metadata from http://rubygems.org/........
Fetching additional metadata from http://rubygems.org/..
Installing rake 10.1.1
Installing i18n 0.6.9
Using minitest 4.7.5
Installing multi_json 1.8.4
Installing atomic 1.1.14
略

ひょっとすると,さなたろうのときと同様に nokogiri の前処理とかいるかもしれません.

さて,DB の準備をします.今回は database.yml で production で動かすと宣言しているので,RAILS_ENV=production をしておきます.
さなたろうのときと同様に,http://xxxxxxx/kozuchi/ とアクセスさせるつもりですので, RAILS_RELATIVE_URL_ROOTを設定します.

# bundle exec rake RAILS_ENV=production assets:precompile RAILS_RELATIVE_URL_ROOT=/kozuchi
# bundle exec rake db:migrate RAILS_ENV=production
Please set KOZUCHI_SECRET_KEY_BASE in your hosting.rb for security!

[deprecated] I18n.enforce_available_locales will default to true in the future. If you really want to skip validation of your locale you can set I18n.enforce_available_locales = false to avoid this message.
==  InitialSchema: migrating ==================================================
-- create_table("users")
   -> 0.0852s
-- create_table("friends")
   -> 0.0829s
-- create_table("accounts")
   -> 0.0825s
-- create_table("deals")
   -> 0.0823s
略
動作テスト

起動してみましょう.

./kozuchi/ で下記を実行し,当該サーバの port 3000番にブラウザで接続して繋がればOK.

# ./script/rails s -e production
=> Booting WEBrick
=> Rails 4.0.2 application starting in production on http://0.0.0.0:3000
=> Run `rails server -h` for more startup options
=> Ctrl-C to shutdown server
Please set KOZUCHI_SECRET_KEY_BASE in your hosting.rb for security!

[deprecated] I18n.enforce_available_locales will default to true in the future. If you really want to skip validation of your locale you can set I18n.enforce_available_locales = false to avoid this message.
[2014-06-01 23:17:55] INFO  WEBrick 1.3.1
[2014-06-01 23:17:55] INFO  ruby 2.1.2 (2014-05-08) [x86_64-linux]
[2014-06-01 23:17:55] INFO  WEBrick::HTTPServer#start: pid=15805 port=3000
passenger による apache2 からの利用

基本的に,さなたろうと同じです.
/etc/apache2/site-available/kozuchi.conf を新たに作り,下記のように記述しておきます.

RackBaseURI /kozuchi
<Directory /var/www/html/kozuchi>
    Options -MultiViews
    Options -Indexes
</Directory>

ここで,/var/www/html は apache2 全体の DocumentRoot です.
続いて,/var/www/html/kozuchi を /var/lib/rails/kozuchi/public にリンクします.

$ sudo ln -s /var/lib/rails/kozuchi/public /var/www/html/kozuchi

apache2 に kozuchi.conf を組み込みます.

$ sudo a2ensite kozuchi
Enabling site kozuchi.
To activate the new configuration, you need to run:
  service apache2 reload

最後に,apache2 からログやテンポラリファイルを書き出せるように権限を与えておきます.

# chown -R nobody.nogroup tmp log

apache2 を再起動させ,http://xxxxxxxxxxxxx/kozuchi/ でアクセスしてみましょう.

小槌 設定のツメ

その他,メールの設定などを済ませておきます.
/var/lib/rails/kozuchi/config/initializer/hosting.rb を sample を見ながら作成します.

SUPPORT_EMAIL_ADDRESS = "hoge@xxxxxx.org"
ROOT_URL              = "http://サーバIP/kozuchi/"
LOGIN_ENGINE_SALT     = "magemage"

KOZUCHI_SECRET_KEY_BASE = 'f321e262107a2e59e2e3fad5ed21c1f647a3f6f1245c60eb67ded861a0db19b50f7f597dc70fee33c932483dad3612c9b874e0acdd64dce451a7efadce4b7ac0'

(修正箇所のみ掲載)
secret は下記のようにして生成しています.

#  bundle exec rake secret
(in /var/lib/rails/kozuchi)
f321e262107a2e59e2e3fad5ed21c1f647a3f6f1245c60eb67ded861a0db19b50f7f597dc70fee33c932483dad3612c9b874e0acdd64dce451a7efadce4b7ac0

ところで,小槌は,どうやってメールサーバを設定するんでしょうね?
幸いなことに,小槌は ユーザ登録時に,メールが届かなくてもOKですので,メールサーバをサーバ内にもっていなくてもよいです.

使ってみよう




適当に,口座を作ってみたりして,仕訳帳に記入してみましょう.

*1:ruby は多少わかるのですが, rails をちゃんと触ったことがないので,お作法がよくわかっていません.

化学療法52日目(2クール2回目10日目):筋肉痛&胃痛&真菌症?

加えて,新たに手足にガングリオンのような出来物が大量発生しはじめました.
ガングリオンは関節付近に出るものですが,これは指の間や足に出来ています.
う〜ん,真菌症とかそういう菌類の感染症じゃあないのかねぇ.多少かゆいらしいのだが,我慢できるようなので悪化し始めたら虎に送ることにしましょう.

かんべー

はんべー殿,ドヤァしすぎ.

( ;∀;)イイハナシダナー

なお話ですが,紀行で言っていたとおり,松寿丸をはんべー殿が匿っていました.
有岡城からかんべーが救出されたとき,信長は松寿丸を殺してしまったことを後悔するわけですが,実ははんべー殿が助命しているわ,当のはんべー殿は既に他界だわ,うやむやのままにかんべーと信長は元鞘になるのでした.めでたしめでたし.
ところで,こういった縁で,はんべー殿の息子重門の烏帽子親をかんべーが務めるのでした.

次週は,村重殿が逃亡するお話です.この一件により,村重殿は高坂昌信桂小五郎と並んで,「日本三大逃げ侍」と呼ばれることになりました*1

*1:嘘です.高坂昌信の「逃げ弾正」や桂小五郎の「逃げの小五郎」というあだ名は本当.