はじめに
我が国には,なんと 2つも実用的な Ruby on Rails な家計簿 Web ツールがあります.
どちらがお勧めかというと,どちらもお勧めです.強いて言えば,面倒くさがり屋の方はさなたろうを,キッチリと正確につけていける人は小槌が合う気がします.ちなみに,私はダブルチェックのためにどちらも使っています.この話は次節で少し触れます.
さて,実際このような家計簿ツールはとても便利なのですが,Ruby on Rails とやらが使えないと動かないのです.私もさっぱりわからない*1ので,備忘録がてら Ubuntu 14.04 LTS Server へインストールするメモを残します.
想定する読者は,Linux サーバを建てたことがある人です.
目標は,
- 家計簿さなたろうを apache2 経由で触れるようにする,
- Web 家計簿 小槌を apache2 経由で触れるようにする,
としておきましょう.
家計簿さなたろう vs. Web 家計簿 小槌
別に VS しなくてもよいのですが,両者の(ぼくの感じることも含め)特徴を述べておきましょう.
機能 | 家計簿さなたろう | Web 家計簿 小槌 | 雑感(感想?) |
---|---|---|---|
費目定義 | ○ | ○ | 食費とか光熱費とかの別です.自由に定義でき,どちらも問題なし |
銀行口座定義 | ○ | ○ | 銀行口座の定義です.自由に定義でき,どちらも問題なし |
現金対応 | ○ | ○ | どちらも問題なし |
銀行口座自由度 | ○ | ○ | いずれも,EdyやSuiCaのような電子現金もチャージ(口座間振込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
(修正箇所のみ記載)
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 '!' ‣ ⬢ Ruby ⬢ Python ⬡ Node.js ⬡ 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です.
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 の設定にさなたろうを呼び出す設定を記述します.
このやり方には,二つのやり方があります.
- sanataro.hogehoge.jp のように,HTTPリクエストホストを apache2 に見分けさせ,/var/lib/rails/sanataro/public を呼び出す方法
- 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ですので,メールサーバをサーバ内にもっていなくてもよいです.