2013/03/31

Ruby on Rails 開発環境構築

対象のバージョン

今回対象にするバージョンは以下の通りです。
  • Ruby 1.9.3
  • Rails 3.2.13

対象の環境

対象の環境は Windows 7 です。

Rubyのインストール

バイナリはRubyInstaller.orgが配布しているものを使います。

Railsの国際化対応

環境

環境は以下を前提にしています。

  • Ruby : 1.9.3p125
  • Rails : 3.2.13

概要

国際化対応はi18nというgemにより実現されます。デフォルトの状態でBundlerにより導入されるのでインストールの必要はありません。

手順

手順といっても国際化対応の機能はデフォルトで組み込まれています。どういう仕様にしたいかによってやることは異なりますのでご注意を!

デフォルトロケールの設定

デフォルトロケールを日本語に設定します。
対象のファイルはconfig/application.rbです。
以下の通り変更します。

 config.i18n.default_locale = 'ja'


リソースファイルの構成

リソースはYAMLで定義し、デフォルトではconfig/locales直下に配置することにより利用可能となります。以下のような形で配置していきます。
  • en.yml
  • ja.yml
  • translation_ja.yml
好みの問題ですが、個人的には1つのファイルで管理するリソースは少なくカテゴライズされて定義されていた方が分かりやすいので以下のように定義しています。


locales
  |-- defaults <-- デフォルトリソースファイルを配置
  |       |-- en.yml 
  |       |-- ja.yml
  |-- models <-- モデルとその属性リソースを定義したファイルを配置
  |       |-- defaults
  |       |      |-- en.yml
  |       |      |-- ja.yml
  |       |-- bookshelf
  |       |      |-- en.yml
  |       |      |-- ja.yml
  |       |-- book
  |       |      |-- en.yml
  |       |      |-- ja.yml
  |-- views <-- 画面系リソースを定義したファイルを配置
          |-- defaults
          |      |-- en.yml
          |      |-- ja.yml
          |-- bookshelf
          |      |-- en.yml
          |      |-- ja.yml
          |-- book
                 |-- en.yml
                 |-- ja.yml 
 

ただし、上記の通りリソースファイルを構成してもデフォルトの状態では読み込んでくれません。そこでconfig/application.rbに以下を追加します。

 config.i18n.load_path += Dir[Rails.root.join('config', 'locales', '**', '*.{rb,yml}').to_s]

第3引数のワイルドカード「**」により再帰的にリソースが読み込まれるようになります。

デフォルトリソースファイルの作成

デフォルトリソースファイルはGitHubで公開されているものを利用させていただきます。
こちらから「https://github.com/svenfuchs/rails-i18n/blob/master/rails/locale/ja.yml」ダウンロードさせて頂いた配置しましょう。

Rails Scaffold

generateしたらやること

 # rake db:migrate

config/database.ymlを編集
 development:
  adapter: sqlite3
  database: db/development.sqlite3
  pool: 5
  encoding: utf8 <-- 追記
  timeout: 5000

public/index.htmlを削除

config/routes.rbを編集

Bookshelf::Application.routes.draw do
  root :to => 'books#index' <-- 追記
  resources :books
end

 # rake routes
      root        /                         books#index <-- これを確認
    books GET    /books(.:format)          books#index
          POST   /books(.:format)          books#create
 new_book GET    /books/new(.:format)      books#new
edit_book GET    /books/:id/edit(.:format) books#edit
     book GET    /books/:id(.:format)      books#show
          PUT    /books/:id(.:format)      books#update
          DELETE /books/:id(.:format)      books#destroy

2013/03/25

Apacheでホストベースのアクセス制御

ホストベースのアクセス制御を行うには、「Order」、「Allow」、「Deny」の3つのディレクティブを使用します。

Orderディレクティブ

Allow、Denyの評価順序を設定するディレクティブです。設定の内容と挙動の関連は以下の通りです。

設定 評価順序 デフォルトの挙動
Order allow,deny Allow->Deny 拒否
Order deny,allow Deny->Allow 許可

Allow/Denyディレクティブ

アクセスを可否を設定するディレクティブです。
書式は以下の通りです。

[Allow|Deny] from all|host|env=[!]env-variable [host|env=[!]env-variable] ...

設定例は以下の通りです。

1. ドメイン名による指定

Allow from test.com
Allow from .test.com
特定のサブドメイン配下すべてを対象にすることも可能です。

2. IPアドレスによる指定

Allow from 10.1.2.3
Allow from 192.168.1.5 192.168.120.2

複数のIPアドレスを指定する場合はスペースで区切ります。

3. ネットワークアドレスによる指定

Allow from 10.1
Allow from 192.168.1 192.168.120

4. ネットマスクを使用した指定

Allow from 10.1.0.0/255.255.0.0

5. CIDRを使用した指定

Allow from 10.1.0.0/16


設定はDirectoryディレクティブ、.htacessで有効です。

設定の上書きについて

.htaccessによる設定の上書きを有効にするには、上位のコンテキストのAllowOverrideで以下のどれかが設定されている必要があります。
  • ALL
  • Limit

Apacheでダイジェスト認証

Apacheでダイジェスト認証を有効にする方法について記載します。

1. httpd.confの設定

httpd.confにダイジェスト認証を有効にするための設定を行います。
以下は、/var/www/html/secureに対するリクエストに対してダイジェスト認証を有効にする設定例です。

<Directory "/var/www/html/secure">
    AuthType Digest
    AuthName "Secret"
    AuthUserFile /etc/httpd/conf/.htdigestfile
    Require valid-user
</Directory>

各ディレクティブの説明です。

AuthType
認証の方法を指定します。ダイジェスト認証の場合は「Digest」を指定します。

AuthName
認証領域を指定します。

AuthUserFile
パスワードファイル名を指定します。

Require
アクセスを許可するユーザを指定します。 「valid-user」の場合、パスワードファイルに含まれるすべてのユーザーを許可します。 個別に指定する場合、アクセスを許可するユーザー名やグループ名をスペースで区切って指定します。

グループによる指定

要調査。

2. パスワードファイルの作成

「AuthUserFile」で指定したパスワードファイルを作成します。作成にはhtdigestコマンドを使います。

# htdigest -c /etc/httpd/conf/.htdigest 認証領域 ユーザID
Adding password for ユーザID in realm 認証領域.
New password:
Re-type new password:

3. Apacheの再起動

Apacheを再起動して設定を有効にします。

# /etc/init.d/httpd restart

Apache でベーシック認証

Apacheでベーシック認証を設定する方法です。ベーシック認証によるセキュリティには問題があります。認証情報がプレーンテキストでやりとりされるってやつですね。周知の事実ではありますがセキュアにするにはSSLと組み合わせて利用する必要がありますのでご注意下さい。

1. httpd.confの設定

httpd.confにベーシック認証を有効にするための設定を行います。
以下は、/var/www/html/secureに対するリクエストに対してベーシック認証を有効にする設定例です。

<Directory "/var/www/html/secure">
    AuthType Basic
    AuthName "Please Enter Your ID and Password."
    AuthUserFile /etc/httpd/conf/.htpasswd
    Require valid-user
</Directory>

各ディレクティブの説明です。

AuthType
認証の方法を指定します。ベーシック認証の場合は「Basic」を指定します。

AuthName
認証の際のブラウザダイアログボックスに出力されるメッセージを指定します。

AuthUserFile
パスワードファイル名を指定します。

Require
アクセスを許可するユーザを指定します。 「valid-user」の場合、パスワードファイルに含まれるすべてのユーザーを許可します。 個別に指定する場合、アクセスを許可するユーザー名やグループ名をスペースで区切って指定します。

グループによる指定

「AuthGroupFile」で指定したファイルのグループに基づいてアクセスを許可することができます。ファイルの書式は以下の通りです。

グループ名:ユーザ1 ユーザ2

2. パスワードファイルの作成

「AuthUserFile」で指定したパスワードファイルを作成します。作成にはhtpasswdコマンドを使います。

# htpasswd -c /etc/httpd/conf/.htpasswd ユーザID
New password:
Re-type new password:
Adding password for user ユーザID

3. Apacheの再起動

Apacheを再起動して設定を有効にします。

# /etc/init.d/httpd restart

AllowOverrideディレクティブについて

.htaccessによって認証を有効にする場合は、DirectoryディレクティブでAllowOverrideにより認証に関する設定の上書きを許可しておく必要があります。(ドキュメントルートのDirectoryディレクティブでの指定が必要になります。)

<Directory "/var/www/html/secure">
    AllowOverride [ALL|AuthConfig]
</Directory>

2013/03/24

Herokuでデータベースを使う

環境

Herokuで標準で利用できるデータベースはPostgresです。

データベースの準備

データベースを利用するには、「heroku-postgresql」アドオンが必要です。
アプリケーションに対して有効になっているアドオンを確認します。
> heroku addons --app アプリケーションID

データベース接続情報を確認します。
>heroku config --app アプリケーションID
=== アプリケーションID Config Vars
HEROKU_POSTGRESQL_XXX_URL: postgres://ユーザ名:パスワード@サーバ名:ポート/データベース

config/database.ymlに確認した接続情報を設定します。
production:
 encoding: unicode
 adapter: postgresql
 username: username
 port: 5432
 host: hostname
 database: database
 password: password

> git add config/database.yml
> git commit -m "set up database's config"
> git push heroku master
> heroku rake db:migrate

さくら

満開だけど天気がいまいちでした…

ガトーショコラ

久しぶりに作りました♪

Rubyで日本語を扱う場合

Rubyで日本語を扱う方法がバージョンによってことなるので纏めておきたいと思います。

バージョン1.8系の場合

1.8系ではグローバル変数である「$KCODE」に対して設定されている文字コードが参照されマルチバイトが処理されています。

バージョン1.9系の場合

1.9系では多言語化仕様としてRuby M17Nが導入されました。
文字コードの指定はマジックコメントを利用して指定します。

#!/bin/env ruby
# -*- coding: utf-8 -*-

2013/03/23

GIMP2にプラグインを追加

GIMP2にプラグインを追加する方法を紹介します。

バージョン

対象のGIMP2のバージョン以下の通りです。

  • 2.6.11

追加手順

GIMP2のプラグインは大半(?)がZIPアーカイブ形式で配布されています。追加するには以下のフォルダに解凍したファイル群を入れるだけです。

C:\Program Files (x86)\GIMP-2.0\lib\gimp\2.0\plug-ins

なお、バージョンや環境によって若干異なる可能性があるのでご注意下さい。
GIMP2を再起動すれば追加完了です。

Heroku環境のアプリケーションを確認

アプリケーション一覧

以下のコマンドを実行すると自分のアカウントでHerokuにホストしているアプリケーションを確認することができます。


>heroku apps
=== My Apps
アプリケーションID1
アプリケーションID2

アプリケーションのメタ情報を取得

以下のコマンドを実行するアプリケーションのメタ情報を取得できます。
>heroku info --app アプリケーションID
=== アプリケーションID
Addons:        heroku-postgresql:dev
Git URL:       git@アプリケーションID.git
Owner Email:   xxx@xxx.xxx
Repo Size:     12M
Slug Size:     17M
Stack:         cedar
Web URL:       http://アプリケーションID.herokuapp.com/

アプリケーションを取得

infoオプションで確認したメタ情報のGit URLを指定してgit cloneすることによりアプリケーションを取得できます。
> git clone git@アプリケーションID.git

アプリケーションの状態を確認

> heroku ps

ログを参照

> heroku logs


2013/03/22

iptablesによるicmpパケットのフィルタリング

監視ツールによるping(いわゆる死活監視です)は通したので単純にicmpパケット全てをDROPという分けにはいきません。そこでicmpパケットに対するフィルタリング設定についてちょっと纏めてみたいと思います。

ICMP-TYPE

icmpにはICMP-TYPEといったものがあります。icmpはTCP/IPネットワークにおいて機器がお互いの状態(間のネットワークの状態といった方がいいかもしれませんが)を確認するためにpingのような診断プログラムによって利用されるプロトコルです。従ってネットワーク的に診断をするためのいろいろな通信ができる必要があるわけで、このいろいろな通信を実現しているのがICMP-TYPEというわけです。
ICMP-TYPEには以下のようなものがあり、iptablesの--icmp-typeオプションを利用することによりicmpパケットに対する細かなフィルタリング設定を実現できます。

type表示内容
0Echo Replyエコー応答Echo Reply(エコー応答)(pingなど)
3Destination Unreachable宛先到達不可(宛先の相手が存在しなかった、もしくは障害中)
4Source Quench発信制御(受信元のパソコンが送信元に、処理が追いつかないので転送を止めてほしいとリクエスト、など)
5Redirectルート変更(ルーター増設時などに最適経路を発見したときに利用)。表示されると一瞬びっくりします
8Echo Requestエコー要求(pingなど)
11Time Exceeded for a Datagram時間超過
12Parameter Problem on a Datagramパラメーター問題(IPヘッダに問題があったとき、受信側が送信側に送る)
13Timestamp Requestタイムスタンプ要求
14Timestamp Replyタイムスタンプ応答
15Information Request情報要求
16Information Reply情報応答
17Address Mask Requestアドレスマスク要求(自分が所属しているサブネットのサブネットマスクを知ろうとしたパソコンが送信する)
18Address Mask Replyアドレスマスク応答

pingを通す

pingによる死活監視を有効にするために、Echo RequestとEcho Replyを通します。
設定は以下の通りです。

iptables -A INPUT -m icmp -p icmp --icmp-type 8 -j ACCEPT
iptables -A OUTPUT -m icmp -p icmp --icmp-type 0 -j ACCEPT

icmp-host-prohibited

よく以下の設定を見かけますがどういう意味だかご存知ですか?
--reject-withオプションに続いてicmp-host-prohibitedが指定されています。これはパケットを拒否した際に返すエラーメッセージを指定するオプションみたいです。この例の場合は、icmp-host-prohibitedというエラーが応答として返されます。意味的には接続を拒否したよってことが伝えられるみたいです。

iptables -A INPUT -m icmp -p icmp -j REJECT --reject-with icmp-host-prohibited

なお、icmp-host-unreachableを指定するとホストまで届かなかったよって意味の応答が返されます。

参考

  • http://www.asahi-net.or.jp/~aa4t-nngk/ipttut/output/index.html

2013/03/20

Chrome でプロキシ切り替え

概要

仮想環境やローカルPCにサーバ立てて開発してるとプロキシのOn/Offをさくっときりかえたくなります。私は「Proxy Switchy!」を利用して対応してます。

「Direct Connection」を選択すると直接接続、その下に登録済みのプロキシの一覧が表示されるので、用途に応じてプロキシを切り替えるなんてことも可能です。


Herokuの開発環境の作成

PaaSを試してみようってことで、HerokuでRailsを使ってアプリケーション開発をするための環境を構築する手順について紹介します。

基本的にはHerokuの「Getting Started」に書いてある内容通りですが。。。

アカウント作成

アカウントを持っていない場合は、Sign Upページでアカウントを作ります。
詳細は書きません。適当にどうぞ。

Heroku Toolbeltインストール

HerokuのPaaSたる所以の一つ「Heroku Toolbelt」をインストールします。PaaSに関しては本番環境の構築、運用が楽で、以外と開発環境作るの面倒ってイメージを持ってました。が、Heroku Toolbeltをインストールすると必要なツールほぼ一式がそろいます。すばらしい!
では、「Heroku Toolbelt」をToolbeltのページにアクセスし自分のプラットフォーム用のものをダウンロードします。
画面中段にプラットフォームを選択するアイコンがあるので、自分の環境にあったアイコンを選択し、「Heroku Toolbelt for XXXXX」(XXXXXの部分は選択したプラットフォーム名が入ります)をクリックするとダウンロードが開始されます。
ダウンロードした「heroku-toolbelt.exe」を実行してウィザードに従ってインストールを行います。
デフォルトの状態で以下のものがインストールされます。

  • Heroku CLI(Herokuのコマンドラインツール)
  • Ruby Runtime(私の環境では1.9.3p385でした)
  • MsysGit
インストールが終わったら「Git Bash」を起動して動作確認です。

$ hreroku --version
heroku/toolbelt/2.35.0 (i386-mingw32) ruby/1.9.3
$ ruby --version
ruby 1.9.3p385 (2013-02-06) [i386-mingw32]
$ git --version
git version 1.8.1.msysgit.1
とりあえず問題なさそうなのでインストールは完了です。

Railsインストール

Railsをインストールします。その前にBundlerを入れましょう。
$ gem install bundler
Fetching: bundler-1.3.4.gem (100%)
Successfully installed bundler-1.3.4
1 gem installed
Installing ri documentation for bundler-1.3.4...
Installing RDoc documentation for bundler-1.3.4...
続いてRaildのインストールです。
$ gem install rails
Fetching: i18n-0.6.1.gem (100%)
Fetching: multi_json-1.7.1.gem (100%)
Fetching: activesupport-3.2.13.gem (100%)
Fetching: builder-3.0.4.gem (100%)
Fetching: activemodel-3.2.13.gem (100%)
Fetching: rack-1.4.5.gem (100%)
Fetching: rack-cache-1.2.gem (100%)
Fetching: rack-test-0.6.2.gem (100%)
Fetching: journey-1.0.4.gem (100%)
Fetching: hike-1.2.1.gem (100%)
Fetching: tilt-1.3.6.gem (100%)
Fetching: sprockets-2.2.2.gem (100%)
Fetching: erubis-2.7.0.gem (100%)
Fetching: actionpack-3.2.13.gem (100%)
Fetching: arel-3.0.2.gem (100%)
Fetching: tzinfo-0.3.37.gem (100%)
Fetching: activerecord-3.2.13.gem (100%)
Fetching: activeresource-3.2.13.gem (100%)
Fetching: polyglot-0.3.3.gem (100%)
Fetching: treetop-1.4.12.gem (100%)
Fetching: mail-2.5.3.gem (100%)
Fetching: actionmailer-3.2.13.gem (100%)
Fetching: rack-ssl-1.3.3.gem (100%)
Fetching: railties-3.2.13.gem (100%)
Fetching: rails-3.2.13.gem (100%)
Successfully installed i18n-0.6.1
Successfully installed multi_json-1.7.1
Successfully installed activesupport-3.2.13
Successfully installed builder-3.0.4
Successfully installed activemodel-3.2.13
Successfully installed rack-1.4.5
Successfully installed rack-cache-1.2
Successfully installed rack-test-0.6.2
Successfully installed journey-1.0.4
Successfully installed hike-1.2.1
Successfully installed tilt-1.3.6
Successfully installed sprockets-2.2.2
Successfully installed erubis-2.7.0
Successfully installed actionpack-3.2.13
Successfully installed arel-3.0.2
Successfully installed tzinfo-0.3.37
Successfully installed activerecord-3.2.13
Successfully installed activeresource-3.2.13
Successfully installed polyglot-0.3.3
Successfully installed treetop-1.4.12
Successfully installed mail-2.5.3
Successfully installed actionmailer-3.2.13
Successfully installed rack-ssl-1.3.3
Successfully installed railties-3.2.13
Successfully installed rails-3.2.13
25 gems installed
Installing ri documentation for i18n-0.6.1...
unable to convert U+00C0 from UTF-8 to Windows-31J for lib/i18n/backend/translit
erator.rb, skipping
unable to convert U+00E4 from UTF-8 to Windows-31J for lib/i18n/tests/interpolat
ion.rb, skipping
unable to convert "\xC2" to UTF-8 in conversion from ASCII-8BIT to UTF-8 to Wind
ows-31J for lib/i18n.rb, skipping
Installing ri documentation for multi_json-1.7.1...
Installing ri documentation for activesupport-3.2.13...
Installing ri documentation for builder-3.0.4...
unable to convert U+00F1 from UTF-8 to Windows-31J for README.rdoc, skipping
Installing ri documentation for activemodel-3.2.13...
Installing ri documentation for rack-1.4.5...
Installing ri documentation for rack-cache-1.2...
Installing ri documentation for rack-test-0.6.2...
Installing ri documentation for journey-1.0.4...
Installing ri documentation for hike-1.2.1...
Installing ri documentation for tilt-1.3.6...
Installing ri documentation for sprockets-2.2.2...
Installing ri documentation for erubis-2.7.0...
Installing ri documentation for actionpack-3.2.13...
Installing ri documentation for arel-3.0.2...
Installing ri documentation for tzinfo-0.3.37...
Installing ri documentation for activerecord-3.2.13...
Installing ri documentation for activeresource-3.2.13...
Installing ri documentation for polyglot-0.3.3...
Installing ri documentation for treetop-1.4.12...
Installing ri documentation for mail-2.5.3...
unable to convert U+00E9 from UTF-8 to Windows-31J for lib/mail/multibyte/chars.
rb, skipping
Installing ri documentation for actionmailer-3.2.13...
Installing ri documentation for rack-ssl-1.3.3...
Installing ri documentation for railties-3.2.13...
Installing ri documentation for rails-3.2.13...
file 'lib' not found
Installing RDoc documentation for i18n-0.6.1...
unable to convert U+00C0 from UTF-8 to Windows-31J for lib/i18n/backend/translit
erator.rb, skipping
unable to convert U+00E4 from UTF-8 to Windows-31J for lib/i18n/tests/interpolat
ion.rb, skipping
unable to convert "\xC2" to UTF-8 in conversion from ASCII-8BIT to UTF-8 to Wind
ows-31J for lib/i18n.rb, skipping
Installing RDoc documentation for multi_json-1.7.1...
Installing RDoc documentation for activesupport-3.2.13...
Installing RDoc documentation for builder-3.0.4...
unable to convert U+00F1 from UTF-8 to Windows-31J for README.rdoc, skipping
Installing RDoc documentation for activemodel-3.2.13...
Installing RDoc documentation for rack-1.4.5...
Installing RDoc documentation for rack-cache-1.2...
Installing RDoc documentation for rack-test-0.6.2...
Installing RDoc documentation for journey-1.0.4...
Installing RDoc documentation for hike-1.2.1...
Installing RDoc documentation for tilt-1.3.6...
Installing RDoc documentation for sprockets-2.2.2...
Installing RDoc documentation for erubis-2.7.0...
Installing RDoc documentation for actionpack-3.2.13...
Installing RDoc documentation for arel-3.0.2...
Installing RDoc documentation for tzinfo-0.3.37...
Installing RDoc documentation for activerecord-3.2.13...
Installing RDoc documentation for activeresource-3.2.13...
Installing RDoc documentation for polyglot-0.3.3...
Installing RDoc documentation for treetop-1.4.12...
Installing RDoc documentation for mail-2.5.3...
unable to convert U+00E9 from UTF-8 to Windows-31J for lib/mail/multibyte/chars.
rb, skipping
Installing RDoc documentation for actionmailer-3.2.13...
Installing RDoc documentation for rack-ssl-1.3.3...
Installing RDoc documentation for railties-3.2.13...
Installing RDoc documentation for rails-3.2.13...
file 'lib' not found
終わりです。

ログイン

Git Bash からherokuコマンドを使ってログインします。
$ heroku login
Enter your Heroku credentials.
Email: 
Password (typing will be hidden):
Authentication successful.
メールアドレスとパスワードを入力して「Authentication successful.」と表示されればログイン成功です。

SSHキーの作成

herokuにアプリケーションをプッシュする際に必要になるSSHキーを作成します。
Git Bashでssh-keygenコマンドを使って作成します。Linuxな方には同じにのコマンドですね。
$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key:
Enter passphrase (empty for no passphrase):
パスフレーズを入力すると秘密鍵と公開鍵のペアが作成されます。公開鍵の方をherokuコマンドを使ってherokuに追加します。
$ heroku keys:add "id_rsa.pub"
これでherokuにpushできる準備が完了です。

ちなみに、SSHキーをセットアップしないでherokuにpushすると次のエラーがでますんで該当する方は上記の手順でSSHキーをセットアップして下さい。
The authenticity of host 'heroku.com (50.19.85.154)' can't be established.
RSA key fingerprint is ・・・.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'heroku.com,50.19.85.154' (RSA) to the list of known hosts.
Permission denied (publickey).
fatal: The remote end hung up unexpectedly

アプリケーションの作成

とりあえず一通り環境を確認するためのテストアプリを作成します。
$ rails new test
$ cd test
HerokuではPostgreSQLが利用可能なのでGemfileの「gem 'sqlite3'」を「gem 'pg'」に変更します。
変更が終わったらBundlerを使って必要なgemを一気にインストールします。
$ bundle install
テストアプリはとれずこれでいいかなぁと。

リポジトリの作成

リポジトリを作成します。リポジトリはアプリケーションのルートディレクトリ(今回は「test」ディレクトリ直下)に作ります。
$ git init
$ git add .
$ git commit -m "init"

Heroku上にアプリケーションを作成

$ heroku create

Herokuにpush

$ git push heroku master

アプリケーションの動作確認

herokuにpushするとアプリケーションがデプロイされ起動されます。
以下のコマンドを実行するとデフォルトのブラウザが起動しpushしたアプリケーションのインデックス画面が表示されます。
$ heroku open
よくあるこんなやつです。
とりあえずこれで環境構築の完了です。使い込んでいないので問題でないかは今後あきらかになると思われます。

2013/03/17

Redmine Backlogs インストール

環境

インストール対象の環境です。

  • OS : Cent OS 6.3
  • Ruby : 1.9.3p385
  • Redmine : 2.2.2
  • MySQL : 5.1.61-4


Backlogsインストール

以下はインストール実行時のログです。参考までに。
# git clone git://github.com/backlogs/redmine_backlogs.git
# cd redmine_backlogs
# git tag
・・・(略)・・・
v0.9.7
v0.9.8
v0.9.9
# git checkout v0.9.35
# export RAILS_ENV=production
# bundle exec rake db:migrate
実行すると以下のエラーが表示されます。
You cannot specify the same gem twice with different version requirements. You specified: test-unit (>= 0) and test-unit (= 1.2.3)
「plugins/redmine_backlogs/Gemfile」から「gem "test-unit", "=1.2.3" if RUBY_VERSION >= "1.9"」の行を削除し再実行します。
# bundle exec rake tmp:cache:clear
# bundle exec rake tmp:sessions:clear
# bundle update
# bundle exec rake redmine:backlogs:install
You are running backlogs v0.9.35, latest version is 0.9.35

=====================================================
             Redmine Backlogs Installer
=====================================================
Installing to the production environment.
Fetching card labels from http://git.gnome.org...done!
Configuring story and task trackers...
-----------------------------------------------------
Which trackers do you want to use for your stories?
  1. バグ
  2. 機能
  3. サポート
Separate values with a space (e.g. 1 3): 1 2 3
You selected the following trackers: バグ, 機能, サポート. Is this correct? (y/n) y
-----------------------------------------------------
Creating a new task tracker.
Please type the tracker's name: Task
You typed 'Task'. Is this correct? (y/n) y
Story and task trackers are now set.
Migrating the database...** Invoke redmine:plugins:migrate (first_time)
** Invoke environment (first_time)
** Execute environment
** Execute redmine:plugins:migrate
** Invoke db:schema:dump (first_time)
** Invoke environment
** Invoke db:load_config (first_time)
** Execute db:load_config
** Execute db:schema:dump
** Invoke redmine:backlogs:fix_positions (first_time)
** Invoke environment (first_time)
** Execute environment
** Execute redmine:backlogs:fix_positions
done!
Installation complete. Please restart Redmine.
Thank you for trying out Redmine Backlogs!
意外とあっさりインストールできました。
とりあえずしばらく使てみます。

参考

2013/03/16

iPhoneのエミュレータ


Windows上で動作するiPhoneのエミュレータについて。

AIR iPhone

Adobe AIR上で動作するiPhoneエミュレータです。
merhlからダウンロードでます
利用するにはAIRのRuntimeが必要です。
入手はこちらから。

TestiPhone.com

エミュレータとはちょっと違いますがWeb上でブラウザの表示を確認できるサイトです。
こちらからどうぞ。

Google Reader サービス終了

Google Reader が6月までサービスを終了するとの発表がありました。
結構使い込んでいたので非常に残念です。とりあえず現時点でデータをエクスポートし、代替えのRSSリーダーを探しています。
Webをあさっていると候補としてはこんなところみたいですね。

モバイルデバイスからもアクセスしたいのでクラウド型であることがやはり前提ですね。あと、Android向けのアプリも提供しててほしいといった感じでしょうか。

2013/03/14

Log4j

Log4j 2なるものがベータリリースされてた。
まだ開発継続してたのね。。。
http://logging.apache.org/log4j/2.x/

2013/03/11

ProFTPD

概要

設定の簡単さが特徴のFTPサーバです。

インストール

 yum install profptd

設定

ProFTPDの設定は、/etc/proftpd.confで行います。

ServerName                      "ProFTPD server"
ServerIdent                     on "FTP Server ready."
ServerAdmin                     root@localhost
DefaultServer                   on
# [inetd|standalone]inetd経由で起動する場合はinetdを指定する。
ServerType                      inetd
# Passive mode に関する設定
MasqueradeAddress               192.168.215.15
PassivePorts                    50000 51000
# 認証設定
AuthPAMConfig                   proftpd
User                            nobody
Group                           nobody
AuthOrder                       mod_auth_pam.c* mod_auth_unix.c
# アクセスディレクトリに関する設定
# ~ ユーザのホームディレクトリより上位の階層を非表示にする
# !adm以外のグループのユーザに対して適応される
DefaultRoot                     ~ !adm
# 認証成功前にServerNameで設定したサーバ名を表示するかどうかを指定
# 認証前に見せる場合はoff
DeferWelcome                    off
# ファイルのタイムスタンプをGMTにするかどうかを指定
# しない場合はoff
TimesGMT                        off
# 認証成功後に表示するメッセージを指定
AccessGrantMsg                  "User %u logged in\n"
# >USER xxx
# 331 Password required for xxx
# >PASS [xxxxxx]
# 230 User xxx logged in
# rootユーザによるログインを許可する
# 許可する場合on
# ただし、/etc/ftpusers からrootユーザのエントリを削除しないとログインできない。
RootLogin                       off
# Globalディレクティブは仮想サーバで共通な設定を行う際に利用する。
<Global>
  Umask                         022
  AllowOverwrite                yes
  <Limit ALL SITE_CHMOD>
    AllowAll
  </Limit>
</Global>
<Limit LOGIN>
  Order allow,deny
  Allow from 127.0.0.1,192.168.215.0/24
  Deny from all
</Limit>
# Anonymous FTP の設定
# Anonymous ディレクティブには公開するディレクトリを指定する
# この場合ftpユーザのホームディレクトリ配下のftpというディレクトリが公開される
<Anonymous ~ftp>
User ftp
Group ftp
UserAlias                       anonymous ftp
</Anonymous>

TCPWrapperを有効にしている場合は、/etc/hosts.allowに接続許可指定を行う。
in.proftpd: 192.168.215.

2013/03/10

FTP接続許可

iptablesでFTPサーバへの接続を許可したい場合の設定について記載します。
通常であれば以下の通りルールを追加すればよいのですが、実はFTPの場合これだけではうまく接続できません。

 # iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 21 -j ACCEPT
とりあえずルールを保存します。
 # iptables-save > /etc/sysconfig/iptables
ここが重要なのですが、FTPを通すにはip_conntrack_ftpip_nat_ftpの2つのモジュールをロードする必要があります。これらのモジュールのロードに関する設定は、/etc/iptables/iptables-configファイルに記述します。
IPTABLES_MODULES="ip_conntrack_ftp ip_nat_ftp"

設定が完了したらiptablesを再起動し、正常にモジュールがロードされているか確認します。
 # lsmod
 Module                  Size  Used by
 nf_nat_ftp              2602  0
 nf_conntrack_ftp       10475  1 nf_nat_ftp
 

管理バー

初歩的なことだとは思いますが、初心者なのでとりあえずメモします。 テンプレートを自作していたら管理バーが表示されなくなりました。 初期セットアップの際にディレクトリを移すとなるみたいですが、管理コンソールではちゃんと表示されていたので作成したテンプレートの問題ですね。 調べた結果、以下のWordPressタグで出力しているようなので自作したテンプレートを確認してみたらいつのまにか消してしまっていたみたいです。 footer.phpにWordPressラグを記載し無事解決です。
  <?php wp_footer(); ?>

get_template_part

概要

標準的なテンプレートを呼び出す関数として以下のようなものが提供されています。
  • get_header
  • get_sidebar
  • get_footer
ただし、テーマを自作していくと部品化を進めていかないとコードがテンプレートファイルがだんだんいけてない感じになってきます。そこで任意のテンプレートを読み込むために利用する関数がget_template_partです。

書式

void get_template_part( string $slug [ , string $name = null ] )

引数

  • $slug : 任意のテンプレート名
  • $name : テーマ名(省略時はnullとして処理される)

戻り値

  • なし

説明

標準テーマ「Twenty Ten」で利用されているのを見て、これ使えると思った次第です。
以下のように定義すると loop-index.php -> loop.php といった順番でテンプレートを探してくれるみたいです。
get_template_part( 'loop', 'index' );

WordPress 3.0(?)から導入された新しいWordPressタグのようです。WordPressタグっていうんですねw。なので古いWordPressを利用されている場合は注意が必要です。