Rhythm & Biology

Engineering, Science, et al.

oil refine install時に"It is not safe to rely on the system's timezone settings"と出る場合の対処法

FuelPHPのプロジェクト作成時に

$ oil refine install

としたら以下のようなエラーが表示されるようになりました。

Fatal error: Uncaught exception 'Fuel\Core\PhpErrorException' with message 'date(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected the timezone 'UTC' for now, but please set date.timezone to select your timezone.'

1.4以前ではタイムゾーンが指定されていない場合にデフォルトでUTCが選択されていましたが、1.4から上記のようなエラーがでるようになったようです。
http://fuelphp.com/forums/discussion/11506/uncaught-exception-with-message-date-unsafe-to-rely-on-systems-timezone

このページに書かれてる通り、php.iniにタイムゾーンを設定することで正しく動くようになりました。

; php.ini
date.timezone = "Asia/Tokyo"

GitLabのインストール

さくらVPS(CentOS)にGitLabをインストールした際のメモ。

参考:https://github.com/gitlabhq/gitlabhq/blob/stable/doc/installation.md

yum

今回はDBにsqlite3を利用するため、あらかじめyumでインストールしておきます。
その他、gitは当たり前として、wgetcurlもインストールしておくこと。
また、後でcharlock_holmesをインストールするときにlibicu-develも必要となるので、これもインストール。
さらに、redisもインストールして走らせておきます。

$ su -
% yum install sqlite-devel libicu-devel redis
% /etc/init.d/redis start

ユーザ作成

まずgitユーザとgitlabユーザを作成。
gitlabユーザはgitグループに入れます。
また、gitlabユーザが/home/gitにアクセスできるようにパーミッションを変更します。

$ sudo useradd git
$ sudo passwd git
$ sudo useradd gitlab
$ sudo passwd gitlab
$ sudo usermod -G git gitlab
$ sudo chmod g+rx /home/git

また、後で必要になるため、一時的にgitlabユーザをsudoersに入れておきます。
(gitlabの動作を確認できたらsudoersから外しておく)

$ sudo vim /etc/sudoers
gitlab  ALL=(ALL)  ALL

ruby(1.9.2-p320)のインストール

環境を汚さないよう、gitlabユーザのホームディレクトリ以下にインストールします。
gemのアップデートもやっておきます。

$ su - gitlab
$ mkdir -p local/src
$ cd local/src
$ wget ftp://ftp.iij.ad.jp/pub/lang/ruby/1.9/ruby-1.9.2-p320.tar.gz
$ tar xvfz ruby-1.9.2-p320.tar.gz
$ cd ruby-1.9.2-p320
$ ./configure --prefix=$HOME/local/ruby-1.9.2-p320
$ make
$ make install
$ vim ~/.bashrc
export PATH=$HOME/local/ruby-1.9.2-p320/bin:$PATH
$ source ~/.bashrc
$ gem i rubygems-update
$ update_rubygems

python(2.7.3)のインストール

rubyと同様、環境を汚さないようにgitlabユーザのホームディレクトリ以下にインストールします。
後で必要になるため、libpythonへのパスも通しておきます。

$ su - gitlab
$ cd local/src
$ wget http://www.python.org/ftp/python/2.7.3/Python-2.7.3.tgz
$ tar xvfz Python-2.7.3.tgz
$ cd Python-2.7.3
$ ./configure --enable-shared --prefix=$HOME/local/python-2.7.3
$ make
$ make install
$ vim ~/.bashrc
export PATH=$HOME/local/python-2.7.3/bin:$HOME/local/ruby-1.9.2-p320/bin:$PATH
export LD_LIBRARY_PATH=$HOME/local/python-2.7.3/lib:$LD_LIBRARY_PATH

easy_install、pipのインストール

$ su - gitlab
$ cd local/src
$ wget http://peak.telecommunity.com/dist/ez_setup.py
$ python ez_setup.py
$ easy_install pip

gitoliteのインストール

gitlabユーザのssh鍵を作成し、公開鍵をgitユーザのホームディレクトリに置いておきます。

$ su - gitlab
$ mkdir .ssh
$ ssh-keygen -t rsa -P "" -f .ssh/id_rsa
$ sudo cp .ssh/id_rsa.pub /home/git/gitlab.pub
$ sudo chmod 0444 /home/git/gitlab.pub

gitユーザのホームディレクトリ以下にインストールします。

$ su - git
$ git clone -b gl-v304 git://github.com/gitlabhq/gitolite.git /home/git/gitolite
$ ./gitolite/install -ln /home/git/bin
$ PATH=$PATH:$HOME/bin
$ gitolite setup -pk /home/git/gitlab.pub
$ sed -i 's/0077/0007/g' /home/git/.gitolite.rc
$ exit
$ sudo chmod -R g+rwX /home/git/repositories/
$ sudo chown -R git:git /home/git/repositories/

リポジトリにアクセスできるかを確認します。
下の通りに表示され、/tmp/gitolite-adminが作成されていればOK(確認できたら削除)。

$ su - gitlab
$ git clone git@localhost:gitolite-admin.git /tmp/gitolite-admin
Initialized empty Git repository in /tmp/gitolite-admin/.git/
remote: Counting objects: 6, done.
remote: Compressing objects: 100% (4/4), done.
remote: Total 6 (delta 0), reused 0 (delta 0)
Receiving objects: 100% (6/6), done.
$ rm -rf /tmp/gitolite-admin

gitlabのインストール

まず必要となるライブラリを先にインストールし、。

$ su - gitlab
$ gem i charlock_holmes --version '0.6.8'
$ pip install pygments
$ gem i bundler

gitlabをダウンロードしてきます。

$ git clone -b stable git://github.com/gitlabhq/gitlabhq.git gitlab

設定ファイルを設置します。
DBに関しては、今回はsqliteを利用します。

$ cd gitlab
$ cp config/gitlab.yml.example config/gitlab.yml
$ cp config/database.yml.sqlite config/database.yml

次にgemをインストールするのですが、その前にGemfileに書かれている'https://'の部分を'git://'に書き換えます。また、今回はDBにmysqlを利用しないため、mysql2のインストールも行わないようにします。

$ vim Gemfile
(https://をgit://に書き換え、gem "mysql2"をコメントアウト)
$ bundle install --without development test --no-deployment

gemのインストールを行いますが、下のコマンドは失敗します。

$ bundle install --without development test --deployment
You are trying to install in deployment mode after changing
your Gemfile. Run `bundle install` elsewhere and add the
updated Gemfile.lock to version control.

この原因は、先ほどGemfileをいじったことのようです。
解決策はいまいち理解していないのですが、stackoverflowに書かれていた方法でうまく動いています。
参考:http://stackoverflow.com/questions/6785626/unable-to-update-gems-on-production-server

$ bundle install --without development test --no-deployment
$ bundle update
$ bundle install --without development test --deployment

gitの設定をしておきます。

$ git config --global user.name 'gitlab'
$ git config --global user.email 'gitlab@example.com'

データベースのセットアップをします。
最後にadminのユーザ名・パスワードが表示されますので、これをメモっておきます。

/home/gitlab/gitlab/vendor/bundle/ruby/1.9.1/gems/blankslate-3.1.2/lib/blankslate.rb:51: warning: undefining `object_id' may cause serious problems

というエラーがでますが、とりあえず無視しておいて大丈夫そうです。
原因・解決策をお分かりになる方がいたら教えていただきたいです。

$ bundle exec rake gitlab:app:setup RAILS_ENV=production
.....
Administrator account created:

login.........admin@local.host
password......5iveL!fe
.....

フックのセットアップをします。

$ sudo cp ./lib/hooks/post-receive /home/git/.gitolite/hooks/common/post-receive
$ sudo chown git:git /home/git/.gitolite/hooks/common/post-receive

最後に、正しくインストールが行われているかを確認します。
"NO"が出ていなければ問題ありません。

$ bundle exec rake gitlab:app:status RAILS_ENV=production

gitlab動作確認

まずgitlabを起動します。
デフォルトでは3000番ポートで起動しますので、必要に応じてiptablesの設定を行って下さい。

$ su - gitlab
$ cd gitlab
$ bundle exec rails s -e production

3000番ポートにアクセスして表示されたら、先ほどメモしておいたadminアカウントでログインします。
初回アクセス時には表示されるまでかなり時間がかかりますが、気長に待っていれば大丈夫です。
ログインが確認できたら動作確認完了ですが、adminのパスワードはすぐに変えておきましょう。もしくは、新たな管理者を作成して、adminアカウントを消しておきましょう。

設定変更

リポジトリを1つ作ってみると分かるのですが、httpアクセスのポート番号が80になっており、このままでは正しくアクセスできません。
正しいポート番号(デフォルトなら3000)を、config/gitlab.ymlに設定する必要があります。
その他、必要に応じてconfig以下のファイルを修正します。

auto mergeの有効化

gitlabはブランチ間でmerge requestを送ることができます。
手作業でマージしてもいいのですが、gitlabにはauto merge機能があり、この作業を楽にしてくれます。
ただし、デフォルトでは有効になっていないため、以下のコマンドを実行し、gitlabを再起動します。

$ bundle exec rake gitlab:app:enable_automerge RAILS_ENV=production

まとめ

以上でgitlabの全インストール工程が完了しました。
ここからさらにunicornで動かしたりといった作業があったりもしますが、これに関しては後日。

FuelPHP入門を読んだ

今月はじめに発売されたばかりのFuelPHP入門を読みました。
といっても、前半の半分を読んで、残りはまだざっと目を通した程度です。


まだ情報も少ない中で、これだけまとまった情報が得られるのは非常に貴重だと思います。
1.1をベースに書かれていますが、1.2RCに関する補足もあります(現在FuelPHPの最新版は1.2になっています)。


話の流れとしては、

  1. 概要
  2. インストール
  3. ディレクトリ構成
  4. コントローラ
  5. ビュー
  6. モデル
  7. フォーム処理
  8. 認証とセッション管理
  9. Email
  10. コアクラス
  11. コーディング規約
  12. コマンドラインツール
  13. 統合開発環境

となっています。
コーディング規約に数ページ割いているのは、「どんどん開発コミュニティに参加してよ」というメッセージでしょうか。


本を読みつつFuelPHPを触ってみた感想としては、特別すごい機能があるわけではないですが、とても気が利いてて、使いやすいフレームワークだなと感じました。
autoloaderのおかげでいちいちrequireを書く必要がありませんし、認証機能も標準で入っていています。Paginationも簡単に書けますし、キャッシュを利用したい場合にはmemcachedやredisを使えます。
PHP歴は2ヶ月もなく、CakePHPSymfonyといった有名フレームワークもまだ使ったことがありませんが、最初に触るフレームワークとしてFuelPHPはとても良いのではないかと思っています。


他のフレームワークを知らないので「比べてみてこうだ」といったことが書けないのが残念ですが、非常にいいフレームワークであることは間違いないと思います。
しばらく使い倒しつつ、coreのコードも読んでいこうと思います。

FuelPHP入門

FuelPHP入門