2011年2月22日火曜日

オープンソース ECサイト:エレコマ(Elecoma)インストール CentOS編

今回はエレコマのインストール手順通り、CentOS5.5、Apache+Passengerで確認。

基本的にはダウンロードに含まれる README の手順通りでほぼ導入までできました。
いくつかハマったり、勝手に変更した箇所がありますのでメモとして。
まだインストール、初期画面表示までの確認です。

準備
  1. checkinstall の導入
    ruby、git 等をrpmで管理するため、checkinstallを導入しています。
    すみませんが、導入手順は割愛させていただきます。

動作確認したバージョンをいくつか
  1. Rubyのバージョン 1.8.7
  2. Railsのバージョン 2.3.8
    =>[2011-02-26追記] ファイル選択のフォームで<BR>タグが表示されてしまう不具合がありそう。 2.3.5に変更。
    また、もしかしたらgemも1.5.xだと依存性の問題があるかもしれないので、RubyGemsは1.3.7あたりをお勧めします。
    =>[2011-02-27] 上記のrails不具合と思われる症状は2.3.10に変更したら解消されました。
  3. Passengerのバージョン 3.0.2 =>[2011-02-26追記] 特に問題はないと思いますが、2.2.7に下げました。

権限関連、他
  1. SELinux
    本来、詳細な権限設定をすべきなのでしょうが、残念ながら知識がなく・・・
    ♯ setenforce 0 で SELinux を無効にして動作
  2. アプリケーションのディレクトリ、ファイルのオーナー変更
    /usr/local/ec/public の tmp、log ディレクトリのオーナー を apache:apache に変更
    また config/environment.rb のオーナーを  apache:apache に変更
  3. /tmp ディレクトリのパーミッションを 777に変更
    ここはだいぶハマってしまったのですが、Passengerのドキュメントにはテンポラリのディレクトリ設定は http://www.modrails.com/documentation/Users%20guide%20Apache.html#PassengerTempDir を参照すると環境変数 PASSENGER_TMPDIR で設定できるようなのですが、何度試しても/tmpに一時ファイルが作成されてしまいました。
  4. /etc/ld.so.conf.d/に usr-local-lib.conf を作成(名前は何でもいいと思いますが、拡張子がconfなら)
    ライブラリのパス設定を追加する必要があるので、上記ファイルに /usr/local/lib の1行を追加し、
    # /sbin/ldconfig
    を実行 以上です。
[ 2011-02-26追記]
  1. PostgreSQL 8.4の場合
    yum install postgresql84
    yum install postgresql84-server
    yum install postgresql84-devel
    でインストール
  2. さらにアダプタ
    gem install pg

ほかに気づいたら追記していきます。

2011年2月9日水曜日

オープンソース ECサイト:Elecoma(エレコマ)をPassenger上で実行

前回は、手抜きをしてNetBeansからMongrelを起動して、エレコマが起動するところまで確認しました。

今回Apache2+Passengerで動作させてみます。
インフラにはめっぽう弱いので、Apacheの設定ファイルを久々にさわってみました。
環境はMacOSXですので、設定ファイル(ec.conf)を
/private/etc/apache2/other
に置きます。

Apacheの起動

$ sudo apachectl -k start
もしくは

$ sudo apachectl -k restart
で良いようです。
ところが
/usr/sbin/apachectl: line 82: ulimit: open files: cannot modify limit: Invalid argument
というエラーがでて、再起動できませんでした。
こちらは、apachectlの82行目を変更して対応。
ここを参考にしました。


VirtualHostの設定はしていますが、DNSやHostsファイルの設定はありませんので、
ブラウザから
http://localhost/
でアクセスしてみます。

ところが403 Forbiddenが発生。
しばらく苦戦しましたが、当たり前の httpd.conf でルート/が Deny from all に。
こちらをとりあえずAllow from allに修正して、無事Passenger上で起動できました。
(くだらいない記事ですみません・・・)

[2011-02-12 追記]
その後何故かPassenger上で起動できなくなってしまいました。
いろいろと試してみましたが、うまくいかないのでCentOS上に構築してみたいと思います。
Macではライブラリの構成など、なかなか難しいようです。

とりあえずMongrelでは動きますので、テスト用として使いたいと思います。
Java の Webアプリケーションと比べると、環境構築で苦しむケースが多くなりそうですね。

2011年2月7日月曜日

オープンソース ECサイト:Elecoma(エレコマ)のインストール2

オープンソースのECサイト構築パッケージElecoma(エレコマ)
インストール時のメモ2


前回はプラグインのインストールまで実施しました。

今回はPassengerのインストール。(はじめに断っておきますが、とりあえずMongrelで動かしたところまでです)

$ sudo gem install passenger
$ sudo passenger-install-apache2-module 

以下の内容が表示され、うまくApache2のモジュールがインストールできたようです。
コンソールに以下のメッセージが表示されたので、メモがわりに転記。

The Apache 2 module was successfully installed.

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

   LoadModule passenger_module /Library/Ruby/Gems/1.8/gems/passenger-3.0.2/ext/apache2/mod_passenger.so
   PassengerRoot /Library/Ruby/Gems/1.8/gems/passenger-3.0.2
   PassengerRuby /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/bin/ruby

After you restart Apache, you are ready to deploy any number of Ruby on Rails
applications on Apache, without any further Ruby on Rails-specific
configuration!

Press ENTER to continue.


--------------------------------------------
Deploying a Ruby on Rails application: an example

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

   
      ServerName www.yourhost.com
      DocumentRoot /somewhere/public    # <-- be sure to point to 'public'!
      
         AllowOverride all              # <-- relax Apache security settings
         Options -MultiViews            # <-- MultiViews must be turned off
      
   

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

  /Library/Ruby/Gems/1.8/gems/passenger-3.0.2/doc/Users guide Apache.html

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

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


Apacheの設定を変更します。
Macでは httpd.conf は /private/etc/apache2/ にありました。
直接httpd.confを修正するのではなく、ec.conf を作成するようなので、
/private/etc/apache2/other/ec.conf を作成してみます。


LoadModule passenger_module /Library/Ruby/Gems/1.8/gems/passenger-3.0.2/ext/apache2/mod_passenger.so
PassengerRoot /Library/Ruby/Gems/1.8/gems/passenger-3.0.2
PassengerRuby /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/bin/ruby

<VirtualHost *:80>
  ServerName ec.example.com
  DocumentRoot /Users/<user>/NetBeansProjects/elecoma2.1/public
  RailsEnv production
  <Directory /Users/<user>/NetBeansProjects/elecoma2.1/public>
    AllowOverride all
    Options -MultiViews
  </Directory>
</VirtualHost>

Postgres のアダプタをインストールする際、
Can't find the PostgreSQL client library (libpq)
のエラーがでてハマりましたが、結局
gem install postgres-pr をNetBeans上で実行したら、データベースのマイグレーションが実行できました。
気になる警告
DEPRECATION WARNING: Rake tasks in vendor/plugins/ar_fixtures/tasks, vendor/plugins/image_submit_tag_ext/tasks, vendor/plugins/jpmobile/tasks, vendor/plugins/jpmobile_emoticon_filter/tasks, vendor/plugins/mbmail/tasks, and vendor/plugins/yaml_waml/tasks are deprecated. Use lib/tasks instead. (called from /Library/Ruby/Gems/1.8/gems/rails-2.3.8/lib/tasks/rails.rb:10)

が表示されましたが、とりあえず進めます。

Passenger もインストールしましたが、NetBeansのMongrel 1.1.5 からも起動できました。


インストールはかなりしんどかった。

2011年2月6日日曜日

オープンソース ECサイト:Elecoma(エレコマ)のインストール

オープンソースのECサイト構築パッケージElecoma(エレコマ)
インストール時のメモ

Linuxではyumを利用すると思いますが、今回はMacでインストールのため、MacPortsでトライしてみます。

ImageMagicは以下のサイトで、Mac用バイナリのインストール方法が記載されていました。

http://www.imagemagick.org/script/binary-releases.php#macosx


$magick> sudo port install ImageMagick

とのことなので、早速。・・・待つこと数分。インストール完了。

以下の通り確認。
$ port installed Image*
Warning: port definitions are more than two weeks old, consider using selfupdate
The following ports are currently installed:
ImageMagick @6.6.3-0_0+q16 (active)

MacPortsのアップデートをしろとのメッセージが表示されているので、
$ sudo port selfupdate
を実行しておきます。

続いて、Rmagick
こちらは http://rmagick.rubyforge.org/install-osx.html を参考にするとgemでインストールできるようなので、NetBeansのツール>Ruby Gemsからインストール。
どうやら書き込み権限がなく失敗。


ちなみにNetBeansのパーミッションの問題は
に記載されていましたが、パーミッションの変更をするという対処になりそうなので、それならコマンドラインからでいいか・・・と思っています。


Rmagickのサイトに記載のとおり

$ sudo gem install rmagick

でインストールします。



Password:
Building native extensions.  This could take a while...
Successfully installed rmagick-2.13.1
1 gem installed
Installing ri documentation for rmagick-2.13.1...

No definition for Magick_colors
 :

と警告のようなメッセージが出ますが、 gem list で確認すると rmagick はインストールされていました。

更にgemで最新版をインストールしてみます。
gettext 2.1.0, gruff 0.3.6, rspec-rails ...

と進んて、rspec-rails インストール時に 
ERROR:  Error installing rspec-rails:
thor requires RubyGems version >= 1.3.6
とエラーが。

$ sudo gem update --system 

を実行。一気に1.5.0になってしまいました。

rspec-railsは無事インストールできた模様。

curl -O http://www.artonx.org/data/lhalib/lhalib-0.8.1.gem
$ sudo gem install lhalib-0.8.1.gem
を実行したのですが、失敗。Mac ではダメか・・・

スキップして、インストールマニュアル通り、webmock、thoughtbot-factory_girl をインストール。

続いて、git は以前に導入済みなので、各種プラグインをインストールします。
NetBeansからインストールしてみますが、vendor/plugins ディレクトリがないので、作成してから実行します。

やはり、NetBeansからではプラグインを見つけることができないようなので、コマンドラインからREADMEどおりにすすめることに。

$ git checkout 654ce3ec2dfa10ac3b05cd9354eb84456d206a6d
は -b オプションが必要らしく
$ git checkout -b 654ce3ec2dfa10ac3b05cd9354eb84456d206a6d
で実行

プラグインは無事インストール完了。

次回はサーバの設定、DBマイグレーション等へ進みましょう。

2011年2月2日水曜日

オープンソース CRM(Fat Free CRM) データを見てみる2

前回に続き、マイグレーションの順で見ていきましょう。

今回は 002_create_user.rb です。

class CreateUsers < ActiveRecord::Migration
  def self.up
    create_table :users, :force => true do |t|
      t.string   :uuid,             :limit => 36
      t.string   :username,         :null => false, :default => "", :limit => 32
      t.string   :email,            :null => false, :default => "", :limit => 64
      t.string   :first_name,       :limit => 32
      t.string   :last_name,        :limit => 32
      t.string   :title,            :limit => 64
      t.string   :company,          :limit => 64
      t.string   :alt_email,        :limit => 64
      t.string   :phone,            :limit => 32
      t.string   :mobile,           :limit => 32
      t.string   :aim,              :limit => 32
      t.string   :yahoo,            :limit => 32
      t.string   :google,           :limit => 32
      t.string   :skype,            :limit => 32
      # >>> The following fields are required and maintained by [authlogic] plugin.
      t.string   :password_hash,    :null => false, :default => ""
      t.string   :password_salt,    :null => false, :default => ""
      t.string   :remember_token,   :null => false, :default => ""
      t.string   :perishable_token, :null => false, :default => ""
      t.string   :openid_identifier
      t.datetime :last_request_at
      t.datetime :last_login_at
      t.datetime :current_login_at
      t.string   :last_login_ip
      t.string   :current_login_ip
      t.integer  :login_count,      :null => false, :default => 0
      # >>> End of [authlogic] maintained fields.
      t.datetime :deleted_at
      t.timestamps
    end     

    add_index :users, [ :username, :deleted_at ], :unique => true
    add_index :users, :email
    add_index :users, :last_request_at
    add_index :users, :remember_token
    add_index :users, :perishable_token
  end

  def self.down
    drop_table :users
  end
end

特に変わったところはなさそうです。
ただ、ユーザの識別子として、uuidを使用しているようです。
ところがテーブルのデータを見てみると、お決まりのidの次はusernameになっています。
どこかでuuidのカラムを削除しているのでしょうか?

・・・ありました。023_remove_uuid.rb が。何か理由があったのでしょうけど、経緯がわかるのはいいのですが、もうusersテーブル作成のところに含めてもいいように思えるのですが。
私もまだRuby歴が浅いので、Railsの文化を理解できていないので、何か理由があるのでしょうかね。

またauthlogicプラグインを使用しているようです。
使用している項目は名称からある程度予想がつくと思います。
 https://github.com/binarylogic/authlogic_example に authlogicプラグインの説明がありますので一応メモ。

次に少々目的から脱線しますが、usersテーブルに対応するモデルクラス /app/model/Userを少し見てみます。

class User < ActiveRecord::Base
  attr_protected :admin, :suspended_at

管理者区分のadminと、休止しているユーザの情報はattr_protectedの宣言(宣言的メソッドという方がいいのかも知れませんが)がなされています。
これは外のクラスから情報を変更されないようにという事なのでしょうか。

その他にも、Userクラスには勉強不足のため理解できないところが多いのですが、まずはデータ構造から見ていこうと思いますので、次回は openid_tablesと思いきや、これはあとで削除されています。ので次回はaccountsを。

オープンソース CRM(Fat Free CRM) データを見てみる

ブログを始めて1ヶ月が経とうとしていますが、Rubyの勉強もしながら、ブログも・・・となると時間がもったいないような気もしていました。
ところが、意外とブログを書いて、記事を参考にしている方が少しでもいるならと、逆に頑張ってしまいそうです。
睡眠不足にはならないよう、少しずつですが続けていきたいと思います。

さて、今回は Fat Free CRM のテーブルを覗いてみます。

/db/migrate フォルダにある最初のマイグレーションファイルは
001_create_session.rb
です。

これは、sessionsテーブルを作成するマイグレーションファイルです。
通常のWebアプリケーションならセッションの情報をブラウザのクッキーにもたせます。Railsでもセッション情報は通常クッキーに保持させるようですが、Railsにはセッション情報をデータベースに持たせる仕組みが予め備わっているそうです。

Rakeタスクに
db:sessions:create
があります。
NetBeansで実行しようとすると次のような説明があります。
Creates a sessions migration for use with ActiveRecord::SessionStore
このRakeタスクを実行することによって、ActiveRecord::SessionStroreと連携してセッション情報をDBに保持することができるようになるようです。

上記のRakeタスクを実行したあとには、db:migrate が必要になりますが、Fat Free CRM では一気に作成してもらっていますので、自分でアプリケーションを作成する際に、この仕組を使うならこの2つのRakeタスクが必要になります。

また、
/config/initializers/session_store.rb
の15行目に
ActionController::Base.session_store = :active_record_store
とあり、これがデータベースでセッション管理するよ!という指定のようです。

実際にアプリケーションにログインして、データを見てみると2件レコードが作成されていました。
でもまだ、クッキーを見ると、sessionsテーブルのsession_idに設定されているデータを同じクッキーがブラウザで確認できました。

書籍「RailsによるアジャイルWebアプリケーション開発 第3版」によると、どうもapplication.rbも修正が必要とのこと。

Fat Free CRM では、
/app/controllers/application_controller.rb
の30行目にある
# protect_from_forgery # :secret => '165eb65bfdacf95923dad9aea10cc64a'
のコメントを外す必要あるようです。(書籍とファイル名が異なるのはRailsのバージョンの違いのせい?)

このあたりの設定が問題なければ、セッションをデータベースで管理できるようになるようですね。
あとで、コメントを外して試してみます。 今日はここまで。