Macportsでtomcat6をインストールしようとしたらOutOfMemoryErrorが起こる件

[javadoc] /opt/local/var/macports/build/_opt_local_var_macports_sources_rsync.macports.org_release_ports_java_xalanj/work/xalan-j_2_7_1/build/docs/apidocs/org/apache/xpath/objects//XNodeSet.html の生成
  [javadoc] java.lang.OutOfMemoryError: Java heap space

xalanjのjavadoc作成でOutOfMemoryErrorが発生します。
回避方法がわからんかったのでApacheからDLしました。。

EC-Riderをbundlerを使って動かしてみる


bundlerはgemの便利管理ツールです

これを使ってみます。

bundlerのインストール

rvmが入ってるものとします。

# rvm install ruby-1.8.7-p248

最新はruby 1.8.7-p249だけど、下のエラー回避のためp248を使います
Rails 3 betaをrvmとruby 1.8.7でインストールする際のgetc is obsoleteエラーを回避する方法

# rvm use ruby-1.8.7-p248
# gem update --system 
# gem install bundler
# bundle -v
Bundler version 0.9.10

Rails 2.3系でbundlerを使うための設定

RAILS_ROOT以下にGemfileを作成します。
こんな感じです。

Gemfile

source :gemcutter
source "http://gems.github.com"

gem 'rails', '2.3.4'
gem 'mysql'
gem "mongrel", :version => '1.1.5'
gem "locale", :version => '2.0.4'
gem "locale_rails", :version => '2.0.4'
gem "mislav-will_paginate", :version => '2.3.11', :lib => "will_paginate"
gem "kakutani-yaml_waml", :version => '0.3.0', :lib => 'yaml_waml'
gem "fastercsv", :version => '1.4.0' # for jp_address
gem "ar-extensions", :version => '0.9.2'  # for jp_address
gem "rubyzip", :version => '0.9.1', :lib => "zip/zipfilesystem"
gem "git", :version => '1.2.4', :lib => "git"
gem "log4r", :version => '1.1.2'
#gem "aws-s3", :version => '0.5.1', :lib => "aws/s3"
gem "RedCloth", :version => '4.2.2'
gem "roxml", :version => '2.5.3'
gem "selectable_attr", :version => "0.3.7"
gem "selectable_attr_rails", :version => "0.3.9"
gem "state_flow" , :version => "0.2.1"
gem "schema_comments" , :version => "0.1.1"
gem 'magic_userstamp', :version => '0.1.1'
gem 'vestal_versions', :version => '0.8.3'
#gem 'rmagick', :version => '2.12.2'

# development用
group :development do
  gem 'bullet'
end

gem 'rcov'

config/environment.rbの中の『config.gem 〜』は消しときます。

あとは、config/preinitializer.rbというのをつくるのと、config/boot.rbに少し追記します。
下のとおりです。

Rails 2.3

Using Bundler 0.9 with Rails 2.3 requires adding a preinitializer, and making a few changes to boot.rb. The exact changes needed can be found at http://gist.github.com/302406.

http://github.com/carlhuda/bundler

gemをインストール

RAILS_ROOTで

# bundle install
Fetching source index from http://gemcutter.org/
Fetching source index from http://gems.github.com/
Resolving dependencies
Installing RedCloth (4.2.3) from system gems 
Installing actionmailer (2.3.4) from system gems 
Installing actionpack (2.3.4) from system gems 
Installing activerecord (2.3.4) from system gems 
Installing activeresource (2.3.4) from system gems 
Installing activesupport (2.3.4) from system gems 
Installing ar-extensions (0.9.2) from system gems 
Installing bullet (1.7.5) from rubygems repository at http://gemcutter.org/ 
Installing cgi_multipart_eof_fix (2.5.0) from system gems 
Installing daemons (1.0.10) from system gems 
Installing fastercsv (1.5.1) from system gems 
Installing fastthread (1.0.7) from system gems 
Installing gem_plugin (0.2.3) from system gems 
Installing git (1.2.5) from system gems 
Installing kakutani-yaml_waml (0.3.0) from system gems 
Installing locale (2.0.5) from system gems 
Installing locale_rails (2.0.5) from system gems 
Installing log4r (1.1.5) from system gems 
Installing magic_userstamp (0.1.1) from system gems 
Installing mislav-will_paginate (2.3.11) from system gems 
Installing mongrel (1.1.5) from system gems 
Installing nokogiri (1.4.1) from system gems 
Installing rack (1.0.1) from system gems 
Installing rails (2.3.4) from system gems 
Installing rake (0.8.7) from system gems 
Installing roxml (3.1.5) from system gems 
Installing rubyzip (0.9.4) from system gems 
Installing schema_comments (0.1.2) from system gems 
Installing selectable_attr (0.3.11) from system gems 
Installing selectable_attr_rails (0.3.11) from system gems 
Installing state_flow (0.2.1) from system gems 
Installing vestal_versions (1.0.2) from system gems 
Your bundle is complete!

これ速いっすよ!

インストールできたらロックする

# bundle lock 
The bundle is now locked. Use `bundle show` to list the gems in the environment.
# bundle show
Gems included by the bundle:
  * RedCloth (4.2.3)
  * actionmailer (2.3.4)
  * actionpack (2.3.4)
  * activerecord (2.3.4)
  * activeresource (2.3.4)
  * activesupport (2.3.4)
  * ar-extensions (0.9.2)
  * bullet (1.7.5)
  * cgi_multipart_eof_fix (2.5.0)
  * daemons (1.0.10)
  * fastercsv (1.5.1)
  * fastthread (1.0.7)
  * gem_plugin (0.2.3)
  * git (1.2.5)
  * kakutani-yaml_waml (0.3.0)
  * locale (2.0.5)
  * locale_rails (2.0.5)
  * log4r (1.1.5)
  * magic_userstamp (0.1.1)
  * mislav-will_paginate (2.3.11)
  * mongrel (1.1.5)
  * nokogiri (1.4.1)
  * rack (1.0.1)
  * rails (2.3.4)
  * rake (0.8.7)
  * roxml (3.1.5)
  * rubyzip (0.9.4)
  * schema_comments (0.1.2)
  * selectable_attr (0.3.11)
  * selectable_attr_rails (0.3.11)
  * state_flow (0.2.1)
  * vestal_versions (1.0.2)

サーバー起動

# ruby script/server

f:id:tohtas:20100303002850p:image
動きました!

Rails製のeコマースパッケージ『EC-Rider』をMac OS Xで使ってみるよ vol.3

前回までのあらすじ

行き詰まった私に、id:t-tairaさんが降臨・・・!

rake ecr:cms:initializeを実行する前に、
rake db:fixtures:loadで、CMSの初期データをDBに登録する必要があります。

ec-adminのRAILS_ROOTで
rake db:fixtures:load
rake ecr:cms:initialize
rake ecr:cms:publish
を実行してみてください。

よろしくお願いします。今度こそw

OKですw

そのとおりやったら見事にec_front/app/views/cmsの下にビューファイルがズラリと!

レッツアクセス!

f:id:tohtas:20100302004220p:image
oh...
しかしこれは・・・!
第一回目にコメントアウトした

 45     class EcHelperImpl
 46       #TAG_MODULE_NAMES.each{|mod_name| include(EcHelper.const_get(mod_name))}

ここが原因じゃないか。
すいません。
コメントアウトを外します。

気を取り直して

f:id:tohtas:20100302015138p:image
おやおや?!
ログみるとこれは第一回目に出たconst_missingじゃないか。

Expected /Users/sogo/code/rails/ec-rider0.8.1/ec_front/app/helpers/ec_rider/ec_helper/method_description.rb to define EcRider::EcHelper::MethodDescription
回避ポイント

ec-rider0.8.1/ec_front/app/helpers/ec_rider/ec_helper 以下のファイルで

require 'ec_rider/ec_helper'

しているところ全部コメントアウトする。

#require 'ec_rider/ec_helper'

理由はないがこれで回避できた。あとで調べる。
autoloadとrequireがなんか絡まって変なことになってると思われる?

追記

しかし、この後トップページが出たあとにコメントアウトを外すとエラーが出なくなった。。



このあとに、また

uninitialized constant Caboose::Acts::BelongsToWithDeletedAssociation

これが出ました。
これは第二回で出たやっこさん。
ファイル名が切れてるんですわ。

# ll vendor/plugins/acts_as_paranoid/lib/caboose/acts 
total 40
drwxr-xr-x@ 6 sogo  staff   204  2 27 23:41 .
drwxr-xr-x@ 3 sogo  staff   102  2 27 23:41 ..
-rwxr-xr-x@ 1 sogo  staff   415 11 13 14:33 belongs_to_with_deleted_asso
-rwxr-xr-x@ 1 sogo  staff  1184 11 13 14:33 has_many_through_without_del
-rw-r--r--@ 1 sogo  staff  7160 11 13 14:33 paranoid.rb
-rw-r--r--@ 1 sogo  staff  3244 11 13 14:33 paranoid_find_wrapper.rb

(其の二を参照)

そして・・・

f:id:tohtas:20100302022252p:image
おー!ついにトップページがご開帳!

Rails製のeコマースパッケージ『EC-Rider』をMac OS Xで使ってみる 其の二

前回までのあらすじ

EC-RiderをDLして動かしてみようとしたら推奨環境がAmazon EC2 LargeだってずっこけそうになったけどOS Xで動くっしょ?とやりはじめてみたら壁にぶつかったけどなんかいけそうになってserver立ち上げてlocalhost:3000にアクセスしたらTemplateMissing!って実際ファイルないわーって困ってたらid:t-tairaさんにコメントもろたよ!

CMSで管理しているビューを生成してあげる必要があります。
ec_adminのRAILS_ROOTで、
rake ecr:cms:initialize # initialize cms data
rake ecr:cms:publish # publish cms_pages and cms_files.
を上記の順番で実行してください。ec_front側にビューが生成されます。

OK!やってみます

ec_adminに必要なライブラリをインストール

rake ecr:cms:initialize
をするに当たりまして、
rake gems:install
やっとかなあかんとおもうんですよ。前回はエラーが出たのでほったらかしにしてたからな。

rake gems:installをするでえ
# sudo rake gems:install         
Password:
(in /Users/sogo/code/rails/ec-rider0.8.1/ec_admin)
no such file to load -- nested_ajax/form_builder/mark_for_destruction

このエラーな。

おや!?

# ll vendor/plugins/nested_ajax/lib/nested_ajax/form_builder
total 24
drwxr-xr-x@  5 sogo  staff   170  2 27 23:41 .
drwxr-xr-x@ 12 sogo  staff   408  2 28 15:53 ..
-rw-r--r--@  1 sogo  staff  3590  8 26  2009 belongs_to_field.rb
-rwxr-xr-x@  1 sogo  staff   635  8 26  2009 mark_for_destruction.
-rw-r--r--@  1 sogo  staff   233  8 26  2009 tag_for_object.rb

mark_for_destructionのファイル名が途中で切れとるでえ!

直しとくで

# mv vendor/plugins/nested_ajax/lib/nested_ajax/form_builder/mark_for_destruction. vendor/plugins/nested_ajax/lib/nested_ajax/form_builder/mark_for_destruction.rb
今度は

固まってしまった

# sudo rake gems:install
Password:
(in /Users/sogo/code/rails/ec-rider0.8.1/ec_admin)
gem install locale --version "= 2.0.4"
/opt/local/lib/ruby/site_ruby/1.8/rubygems/spec_fetcher.rb:232: warning: getc is obsolete; use STDIN.getc instead

なんか固まったままや!

gemファイルをDLして直接インストールする

潔くあきらめて代替案採用
http://rubyforge.org/frs/?group_id=1997&release_id=41421
locale-2.0.5.gem
locale_rails-2.0.5.gem

# sudo gem install locale-2.0.5.gem 
Password:
Successfully installed locale-2.0.5
1 gem installed
Installing ri documentation for locale-2.0.5...
Installing RDoc documentation for locale-2.0.5...

# sudo gem install locale_rails-2.0.5.gem 
Successfully installed locale_rails-2.0.5
1 gem installed
Installing ri documentation for locale_rails-2.0.5...
Installing RDoc documentation for locale_rails-2.0.5...

さて、これでgems:installは完了

rake ecr:cms:initialize いきます

いってみる
# rake ecr:cms:initialize
(in /Users/sogo/code/rails/ec-rider0.8.1/ec_admin)
Rails Error: Unable to access log file. Please ensure that /Users/sogo/code/rails/ec-rider0.8.1/ec_admin/log/development.log exists and is chmod 0666. The log level has been raised to WARN and the output directed to STDERR until the problem is fixed.
[WARNING] The git gem requires git 1.6.0.0 or later, but only found 1.5.5.4. You should probably upgrade.
rake aborted!
undefined method `supported_locales=' for I18n:Module

(See full trace by running task with --trace)

エラーや!

logのパーミッション
# ll log
total 24
drwxr-xr-x@  5 sogo  staff  170  2 28 17:06 .
drwxr-xr-x@ 22 sogo  staff  748  2 28 17:03 ..
-rw-r--r--@  1 sogo  staff    3  4 27  2009 .gitignore
-rw-r--r--   1 root  staff   51  2 28 01:50 development.log
-rw-r--r--   1 root  staff   71  2 28 17:06 production_rotate.log
# sudo chown -R sogo log
# ll log
total 24
drwxr-xr-x@  5 sogo  staff  170  2 28 17:06 .
drwxr-xr-x@ 22 sogo  staff  748  2 28 17:03 ..
-rw-r--r--@  1 sogo  staff    3  4 27  2009 .gitignore
-rw-r--r--   1 sogo  staff   51  2 28 01:50 development.log
-rw-r--r--   1 sogo  staff   71  2 28 17:06 production_rotate.log
gitは1.6.0.0以降を
# git --version
git version 1.5.5.4

たぶん前にソースコードからビルドしてインストールしたな

portで入れ直します

# sudo port install git-core
再チャレンジ
# rake ecr:cms:initialize
(in /Users/sogo/code/rails/ec-rider0.8.1/ec_admin)
rake aborted!
undefined method `supported_locales=' for I18n:Module

(See full trace by running task with --trace)

アウチ!

あれ?なんで2.0.4固定になっているんだろう
# rake gems
(in /Users/sogo/code/rails/ec-rider0.8.1/ec_admin)
 - [I] mongrel = 1.1.5
    - [I] gem_plugin >= 0.2.3
    - [I] daemons >= 1.0.3
    - [I] fastthread >= 1.0.1
    - [I] cgi_multipart_eof_fix >= 2.4
 - [ ] locale = 2.0.4
 - [ ] locale_rails = 2.0.4
# gem list

*** LOCAL GEMS ***
locale (2.0.5, 2.0.3)
locale_rails (2.0.5, 2.0.3)
2.0.5入ってるのでコメントアウトしますね

/ec-rider0.8.1/ec_admin/config/environment.rb

 33   #config.gem "locale", :version => '2.0.4'
 34   #config.gem "locale_rails", :version => '2.0.4'
 35   config.gem "locale"
 36   config.gem "locale_rails"
またいきます
# rake ecr:cms:initialize         
(in /Users/sogo/code/rails/ec-rider0.8.1/ec_admin)
SelectableAttrRails.add_features_to_rails
SelectableAttrRails.add_features_to_active_record
rake ecr:cms:initialize begin
rake ecr:cms:initialize failed!
uninitialized constant Caboose::Acts::HasManyThroughWithoutDeletedAssociation
  /opt/local/lib/ruby/gems/1.8/gems/activesupport-2.3.4/lib/active_support/dependencies.rb:446:in `load_missing_constant'
  /opt/local/lib/ruby/gems/1.8/gems/activesupport-2.3.4/lib/active_support/dependencies.rb:80:in `const_missing_not_from_s3_library'
  /opt/local/lib/ruby/gems/1.8/gems/aws-s3-0.5.1/lib/aws/s3/extensions.rb:174:in `const_missing'
  /Users/sogo/code/rails/ec-rider0.8.1/ec_admin/vendor/plugins/acts_as_paranoid/init.rb:19:in `has_many_without_nested_ajax'
  /opt/local/lib/ruby/gems/1.8/gems/aws-s3-0.5.1/lib/aws/s3/extensions.rb:134:in `returning'

S3がらみのトレースがでてますけど
S3はないのでとりあえずコメントアウトしておく
/ec-rider0.8.1/ec_admin/config/environment.rb

 44   #config.gem "aws-s3", :version => '0.5.1', :lib => "aws/s3"
はい いきまーす
# rake ecr:cms:initialize
(in /Users/sogo/code/rails/ec-rider0.8.1/ec_admin)
SelectableAttrRails.add_features_to_rails
SelectableAttrRails.add_features_to_active_record
rake ecr:cms:initialize begin
rake ecr:cms:initialize failed!
uninitialized constant Caboose::Acts::HasManyThroughWithoutDeletedAssociation
  /opt/local/lib/ruby/gems/1.8/gems/activesupport-2.3.4/lib/active_support/dependencies.rb:446:in `load_missing_constant'
  /opt/local/lib/ruby/gems/1.8/gems/activesupport-2.3.4/lib/active_support/dependencies.rb:80:in `const_missing'
  /Users/sogo/code/rails/ec-rider0.8.1/ec_admin/vendor/plugins/acts_as_paranoid/init.rb:19:in `has_many_without_nested_ajax'
  /opt/local/lib/ruby/gems/1.8/gems/activesupport-2.3.4/lib/active_support/core_ext/object/misc.rb:39:in `returning'
  /Users/sogo/code/rails/ec-rider0.8.1/ec_admin/vendor/plugins/acts_as_paranoid/init.rb:16:in `has_many_without_nested_ajax'
  /Users/sogo/code/rails/ec-rider0.8.1/ec_admin/vendor/plugins/nested_ajax/lib/nested_ajax/name_to_display.rb:54:in `has_many'
  /Users/sogo/code/rails/ec-rider0.8.1/ec_admin/app/models/cms_publish.rb:12
  /opt/local/lib/ruby/gems/1.8/gems/activesupport-2.3.4/lib/active_support/dependencies.rb:380:in `load_without_new_constant_marking'

Caboose?
どうもこれはacts_as_paranoidがらみっぽい

おや!?
# ll vendor/plugins/acts_as_paranoid/lib/caboose/acts/                            
total 40
drwxr-xr-x@ 6 sogo  staff   204  2 27 23:41 .
drwxr-xr-x@ 3 sogo  staff   102  2 27 23:41 ..
-rwxr-xr-x@ 1 sogo  staff   428  6 10  2009 belongs_to_with_deleted_asso
-rwxr-xr-x@ 1 sogo  staff  1210  6 10  2009 has_many_through_without_del
-rw-r--r--@ 1 sogo  staff  7368 10 16 09:55 paranoid.rb
-rw-r--r--@ 1 sogo  staff  3338  6 10  2009 paranoid_find_wrapper.rb

rbファイル名が途中で切れとる、、、
中身は問題なさそうなのでrbファイルを復旧

# cp vendor/plugins/acts_as_paranoid/lib/caboose/acts/belongs_to_with_deleted_asso vendor/plugins/acts_as_paranoid/lib/caboose/acts/belongs_to_with_deleted_association.rb
# cp vendor/plugins/acts_as_paranoid/lib/caboose/acts/has_many_through_without_del  vendor/plugins/acts_as_paranoid/lib/caboose/acts/has_many_through_without_deleted_association.rb
いきますよー
# rake ecr:cms:initialize                                                          
 (in /Users/sogo/code/rails/ec-rider0.8.1/ec_admin)
SelectableAttrRails.add_features_to_rails
SelectableAttrRails.add_features_to_active_record
rake ecr:cms:initialize begin
rake ecr:cms:initialize failed!
Couldn't find CmsProject with ID=1
  /opt/local/lib/ruby/gems/1.8/gems/activerecord-2.3.4/lib/active_record/base.rb:1586:in `find_one'

オーデーターがアリマセーン

とりあえずこれやってみっか
# rake db:data:load

だめだった

コメントアウトで逃げ
/ec-rider0.8.1/ec_admin/lib/ec_rider/cms_setup.rb

191       CmsProjectAssign.destroy_all
192       CmsPublish.destroy_all
193       CmsPublishedProject.destroy_all
194       CmsProjectApproval.destroy_all
195       #CmsProject.update(1, :acceptance_type_key => :no_approval, :status_key => :approved)
はいはーい いきまーす
# rake ecr:cms:initialize
(in /Users/sogo/code/rails/ec-rider0.8.1/ec_admin)
SelectableAttrRails.add_features_to_rails
SelectableAttrRails.add_features_to_active_record
rake ecr:cms:initialize begin
creating ecrider cms page data
creating base project shop cms page data
creating base project shop cms template data
rake ecr:cms:initialize failed!
不正なレコードです。
  /opt/local/lib/ruby/gems/1.8/gems/activerecord-2.3.4/lib/active_record/validations.rb:1090:in `save_without_dirty!'
  /opt/local/lib/ruby/gems/1.8/gems/activerecord-2.3.4/lib/active_record/dirty.rb:87:in `save_without_transactions!'
  /opt/local/lib/ruby/gems/1.8/gems/activerecord-2.3.4/lib/active_record/transactions.rb:200:in `save!'
  /opt/local/lib/ruby/gems/1.8/gems/activerecord-2.3.4/lib/active_record/connection_adapters/abstract/database_statements.rb:136:in `transaction'
  /opt/local/lib/ruby/gems/1.8/gems/activerecord-2.3.4/lib/active_record/transactions.rb:182:in `transaction'
  /opt/local/lib/ruby/gems/1.8/gems/activerecord-2.3.4/lib/active_record/transactions.rb:200:in `save!'
  /opt/local/lib/ruby/gems/1.8/gems/activerecord-2.3.4/lib/active_record/transactions.rb:208:in `rollback_active_record_state!'
  /opt/local/lib/ruby/gems/1.8/gems/activerecord-2.3.4/lib/active_record/transactions.rb:200:in `save!'
  /Users/sogo/code/rails/ec-rider0.8.1/ec_admin/lib/ec_rider/cms_setup.rb:40:in `create_shop_base_cms_templates'

どうも「表示可能位置とデフォルトテンプレート表示位置が合っていません。」というエラーが出ているもよう。
わからん。

無理矢理コメントアウト
/ec-rider0.8.1/ec_admin/lib/ec_rider/cms_setup.rb

 32     def create_shop_base_cms_templates
 33       CmsTemplate.display_position_keys.each do |position|
 34         files = Dir.glob(File.join(EcRider.config.ec_admin_root, 'initial_data', 'cms', 'cms_layouts', "#{position}*.xml"))
 35         update_template_content_from_fixture(files)
 36       end
 37       # topとbottomをデフォルトテンプレートに設定します
 38       template = CmsTemplate.find(:first, :conditions => ['development_code = ?', 'cms/top'])
 39       template.default_template_position_key = :top
 40       #template.save!
 41       template = CmsTemplate.find(:first, :conditions => ['development_code = ?', 'cms/bottom'])
 42       template.default_template_position_key = :bottom
 43       #template.save!
 44     end

とおった!

# rake ecr:cms:initialize
(in /Users/sogo/code/rails/ec-rider0.8.1/ec_admin)
SelectableAttrRails.add_features_to_rails
SelectableAttrRails.add_features_to_active_record
rake ecr:cms:initialize begin
creating ecrider cms page data
creating base project shop cms page data
creating base project shop cms template data
creating base project cms file data
rake ecr:cms:initialize success!
# rake ecr:cms:publish
(in /Users/sogo/code/rails/ec-rider0.8.1/ec_admin)
SelectableAttrRails.add_features_to_rails
SelectableAttrRails.add_features_to_active_record
rake ecr:cms:publish begin
rake ecr:cms:publish success!
でも、、、

f:id:tohtas:20100301001115p:image
やっぱりできてないな。CmsTemplateとか作ってないからな。
CmsProjectってid=1でつくっとかないといけないのかな??

CmsProjectとCmsTemplateのレコードをつくってみます

CmsProjectのレコード登録
 >> c = CmsProject.new({:id => 1, :priority => 1, :acceptance_type => 0, :project_code => '007', :project_name => 'ゼロゼロセブン', :started_at => Time.now, :finished_at => nil, :status_cd => 4, :created_at => Time.now, :updated_at => Time.now, :creator_id => nil, :updater_id => nil, :deleter_id => nil})
=> #<CmsProject id: nil, priority: 1, acceptance_type: 0, project_code: "007", project_name: "ゼロゼロセブ\343\203\263", started_at: "2010-03-01 00:46:42", finished_at: nil, status_cd: 4, created_at: "2010-03-01 00:46:42", updated_at: "2010-03-01 00:46:42", creator_id: nil, updater_id: nil, deleter_id: nil>
>> c.valid?
=> true
>> c.save!
=> true
CmsTemplateのレコード登録 1つ目
>> template = CmsTemplate.new({:id => 1, :cms_project_id => 1, :name => 'ゼロゼロセブン', :display_position => 0, :delete_at_publish => false, :created_at => Time.now, :updated_at => nil, :default_template_position => 0, :terminal => 0,  :template_code => nil, :development_code => 'cms/top', :creator_id => nil, :updater_id => nil, :deleter_id => nil})
=> #<CmsTemplate id: nil, cms_project_id: 1, name: "ゼロゼロセブ\343\203\263", display_position: 0, delete_at_publish: false, created_at: "2010-03-01 02:00:25", updated_at: nil, default_template_position: 0, terminal: 0, template_code: nil, development_code: "cms/top", creator_id: nil, updater_id: nil, deleter_id: nil>
>> template.valid?
=> true
>> template.save!
=> true
CmsTemplateのレコード登録 2つ目
>> template = CmsTemplate.new({:id => 2, :cms_project_id => 1, :name => 'ゼロゼロナイン', :display_position => 1, :delete_at_publish => false, :created_at => Time.now, :updated_at => nil, :default_template_position => 1, :terminal => 0,  :template_code => nil, :development_code => 'cms/bottom', :creator_id => nil, :updater_id => nil, :deleter_id => nil})
=> #<CmsTemplate id: nil, cms_project_id: 1, name: "ゼロゼロナイ\343\203\263", display_position: 1, delete_at_publish: false, created_at: "2010-03-01 02:02:15", updated_at: nil, default_template_position: 1, terminal: 0, template_code: nil, development_code: "cms/bottom", creator_id: nil, updater_id: nil, deleter_id: nil>
>> template.valid?
=> true
>> template.save!
=> true

rake ecr:cms:initializeを実行

# rake ecr:cms:initialize        
(in /Users/sogo/code/rails/ec-rider0.8.1/ec_admin)
SelectableAttrRails.add_features_to_rails
SelectableAttrRails.add_features_to_active_record
rake ecr:cms:initialize begin
creating ecrider cms page data
creating base project shop cms page data
creating base project shop cms template data
rake ecr:cms:initialize failed!
不正なレコードです。
  /opt/local/lib/ruby/gems/1.8/gems/activerecord-2.3.4/lib/active_record/validations.rb:1090:in `save_without_dirty!'
  /opt/local/lib/ruby/gems/1.8/gems/activerecord-2.3.4/lib/active_record/dirty.rb:87:in `save_without_transactions!'
  /opt/local/lib/ruby/gems/1.8/gems/activerecord-2.3.4/lib/active_record/transactions.rb:200:in `save!'
  /opt/local/lib/ruby/gems/1.8/gems/activerecord-2.3.4/lib/active_record/connection_adapters/abstract/database_statements.rb:136:in `transaction'
  /opt/local/lib/ruby/gems/1.8/gems/activerecord-2.3.4/lib/active_record/transactions.rb:182:in `transaction'
  /opt/local/lib/ruby/gems/1.8/gems/activerecord-2.3.4/lib/active_record/transactions.rb:200:in `save!'
  /opt/local/lib/ruby/gems/1.8/gems/activerecord-2.3.4/lib/active_record/transactions.rb:208:in `rollback_active_record_state!'
  /opt/local/lib/ruby/gems/1.8/gems/activerecord-2.3.4/lib/active_record/transactions.rb:200:in `save!'
  /Users/sogo/code/rails/ec-rider0.8.1/ec_admin/lib/ec_rider/cms_setup.rb:40:in `create_shop_base_cms_templates'
  /Users/sogo/code/rails/ec-rider0.8.1/ec_admin/lib/tasks/ec_rider.rake:140

まだエラー

エラーが出ているのはここ

/ec-rider0.8.1/ec_admin/app/models/cms_template.rb

 49   def validate
 50     # 表示可能位置とデフォルトテンプレート表示位置の整合性チェック
 51     unless self.default_template_position.nil?
 52       unless self.display_position_key.to_s.include?(self.default_template_position_key.to_s)
 53         errors.add_to_base "表示可能位置とデフォルトテンプレート表示位置が合っていません。"
 54       end
 55     end
無理矢理エラーが出ないようにしてみる(40行目と44行目)

/ec-rider0.8.1/ec_admin/lib/ec_rider/cms_setup.rb

 37       # topとbottomをデフォルトテンプレートに設定します
 38       template = CmsTemplate.find(:first, :conditions => ['development_code = ?', 'cms/top'])
 39       template.default_template_position_key = :top
 40       template.display_position_key = :top #add
 41       template.save!
 42       template = CmsTemplate.find(:first, :conditions => ['development_code = ?', 'cms/bottom'])
 43       template.default_template_position_key = :bottom
 44       template.display_position_key = :bottom #add
 45       template.save!
 46     end

rake ecr:cms:initializeを実行

 # rake ecr:cms:initialize
(in /Users/sogo/code/rails/ec-rider0.8.1/ec_admin)
SelectableAttrRails.add_features_to_rails
SelectableAttrRails.add_features_to_active_record
rake ecr:cms:initialize begin
creating ecrider cms page data
creating base project shop cms page data
creating base project shop cms template data
creating base project cms file data
rake ecr:cms:initialize success!

success!した!

rake ecr:cms:publishを実行

# rake ecr:cms:publish   
(in /Users/sogo/code/rails/ec-rider0.8.1/ec_admin)
SelectableAttrRails.add_features_to_rails
SelectableAttrRails.add_features_to_active_record
rake ecr:cms:publish begin
rake ecr:cms:publish success!

success!した!

でも、、、

# cd ../ec_front 
# ll app/views/cms 
total 8cms/
drwxr-xr-x@  3 sogo  staff  102  2 27 23:41 .
drwxr-xr-x@ 22 sogo  staff  748  2 27 23:41 ..
-rw-r--r--@  1 sogo  staff    4  8 26  2009 .gitignore

ビューファイルできてないっす!なんで?!

追記

>> CmsProject.find_all_to_be_deployed_or_deleted
=> []

オブジェクトの特異メソッドを定義する(明示的に特異クラスのインスタンスメソッドとして定義する場合)

今度こそinstance_evalとmodule_evalを理解してもらった
最近の基礎シリーズいいです!もっとやってほしい!

環境

# ruby -v
ruby 1.8.7 (2009-06-12 patchlevel 174) [i686-darwin9]

Objectのオブジェクトobj

>> obj = Object.new
=> #<Object:0x1a896d8>
>> block = Proc.new do
?>   def foo
>>    'foo'
>>   end
>> end
=> #<Proc:0x01a835bc@(irb):4>

objの特異クラスを取り出してインスタンスメソッドを定義

>> eigenclass = class << obj; self; end
=> #<Class:#<Object:0x1a896d8>>
>> eigenclass.module_eval &block
=> nil
>> eigenclass.__send__(:define_method, :hoge){ "hoge" }
=> #<Proc:0x01a7f7f0@(irb):3>
>> obj.foo
=> "foo"
>> obj.hoge
=> "hoge"

特異クラスをインスタンス化できない

>> obj2 = eigenclass.new
TypeError: can't create instance of virtual class
        from (irb):16:in `new'
        from (irb):16

このあたりの話で個人的に分かりやすかったのは実践Rails

実践 Rails ―強力なWebアプリケーションをすばやく構築するテクニック
実践 Rails ―強力なWebアプリケーションをすばやく構築するテクニック株式会社クイープ

オライリージャパン 2008-10-27
売り上げランキング : 242014

おすすめ平均 star
star訳が残念すぎます
star「Railsの外側」の問題解決の宝庫

Amazonで詳しく見る
by G-Tools

Rails製のeコマースパッケージ『EC-Rider』をMac OS Xで使ってみる

ネットショップを運営するならEC-Rider(イーシー・ライダー)

展開

#tar xvfz ec-rider0.8.1.tar.gz

その中は

# ls
INSTALL      INSTALL.rdoc README.rdoc  ec_admin     ec_front

ec_admin、ec_frontはそれぞれRailsアプリ。
管理アプリとフロントアプリということだと思う。

INSTALL.rdocをみてみる

=== 推奨環境
Amazon EC2 Large
Ubuntu 9.04

なんと、、、Amazon EC2 Large とはこれのことですか?
f:id:tohtas:20100228035103p:image
ちょっとお試ししたいだけなのに敷居が高すぎる、、、

とりあえず、Mac OS X 10.5.8 Leopard でいけるところまでいってみたいと思います。
Ruby

# ruby -v
ruby 1.8.7 (2010-01-10 patchlevel 249) [i686-darwin9]

mysqlは

# mysql5   
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 32
Server version: 5.1.44 Source distribution

必要なライブラリをインストールする

MacPorts自体を最新にしておきます
# sudo port -d selfupdate
# sudo port -d sync

MacPortsでインストール

# sudo port install rb-mysql     
# sudo port install libxml2
# sudo port install ImageMagick
# sudo port install rb-rmagick

gemでインストール

# sudo gem install rmagick -v=2.12.2
# sudo gem install mongrel mongrel_cluster
# sudo gem install sudo gem install rspec rspec-rails

ec_frontに必要なライブラリをインストール

# cd ec_front/ 
# sudo rake gems:install

mislav-will_paginateやkakutani-yaml_wamlがインストール失敗してしまった。
が、gemのsourcesにgems.github.comを追加して再度行なえばOK.

# sudo gem sources -a http://gems.github.com/
Password:
http://gems.github.com/ added to sources
# sudo rake gems:install     

ec_adminに必要なライブラリをインストール

# cd ec_admin/
#  sudo rake gems:install                           
(in /Users/sogo/code/rails/ec-rider0.8.1/ec_admin)
rake aborted!
no such file to load -- nested_ajax/form_builder/mark_for_destruction

失敗しました!とりあえずfrontを動かしたいので放置して進みます。

ec_frontのmigrationします

#  rake db:migrate RAILS_ENV=production
(in /Users/sogo/code/rails/ec-rider0.8.1/ec_front)
rake aborted!
Permission denied - /Users/sogo/code/rails/ec-rider0.8.1/ec_front/log/production_rotate.log

(See full trace by running task with --trace)

こけた!

# ll log
total 24
drwxr-xr-x@  5 sogo  staff  170  2 28 01:48 .
drwxr-xr-x@ 24 sogo  staff  816  2 28 01:37 ..
-rw-r--r--@  1 sogo  staff    3  4 27  2009 .gitignore
-rw-r--r--   1 root  staff   51  2 28 01:37 development.log
-rw-r--r--   1 root  staff   71  2 28 01:48 production_rotate.log

logファイルのオーナーがrootになっている。

# sudo chmod -R 775 log

とりあえず回避です。

もう一度

# rake db:migrate RAILS_ENV=production 
(in /Users/sogo/code/rails/ec-rider0.8.1/ec_front)
SelectableAttrRails.add_features_to_rails
SelectableAttrRails.add_features_to_active_record
==  MergeStep2BrancheOrMigrate: migrating =====================================
-- !!!WARNING!!! This maigrate will initialize tables Are you sure you want to 
continue? [yn] 

微妙に誤字が気になる(maigrate)
yを選んでmigration完了!
このあと、productionにする意義がいまのところないことに気づいたので、developmentでmigrateし直しました。

サーバーを起動!

# ruby script/server 
=> Booting Mongrel
=> Rails 2.3.4 application starting on http://0.0.0.0:3000
/opt/local/lib/ruby/1.8/fileutils.rb:243:in `mkdir': Permission denied - /Users/sogo/code/rails/ec-rider0.8.1/ec_front/tmp/cache (Errno::EACCES)

またパーミッションか!

tmpのオーナーがrootです。

# ll            
total 48
drwxr-xr-x@ 24 sogo  staff   816  2 28 01:37 .
drwxr-xr-x@  9 sogo  staff   306  2 28 00:01 ..
-rw-r--r--@  1 sogo  staff    58  4 27  2009 .gitignore
-rw-r--r--@  1 sogo  staff  1312  1 30  2009 .loadpath
-rw-r--r--@  1 sogo  staff   448 11  5  2008 .project
-rw-r--r--@  1 sogo  staff   151  2  4  2009 Capfile
-rw-r--r--@  1 sogo  staff   307 11  5  2008 Rakefile
drwxr-xr-x@  8 sogo  staff   272  2 27 23:41 app
drwxr-xr-x@  3 sogo  staff   102  2 27 23:41 components
drwxr-xr-x@ 20 sogo  staff   680  2 28 01:50 config
-rw-r--r--@  1 sogo  staff   186 10 16 09:55 config.ru
drwxr-xr-x@  6 sogo  staff   204  2 27 23:41 db
drwxr-xr-x@  6 sogo  staff   204  2 27 23:41 doc
drwxr-xr-x@ 21 sogo  staff   714  2 27 23:41 lib
drwxr-xr-x@  3 sogo  staff   102  2 27 23:41 locale
drwxrwxr-x@  5 sogo  staff   170  2 28 01:48 log
drwxr-xr-x@  3 sogo  staff   102  2 27 23:41 po
drwxr-xr-x@  5 sogo  staff   170  2 27 23:41 public
drwxr-xr-x@ 25 sogo  staff   850  2 27 23:41 script
drwxr-xr-x@ 10 sogo  staff   340  2 27 23:41 spec
drwxr-xr-x@  4 sogo  staff   136  2 27 23:41 stories
drwxr-xr-x@  8 sogo  staff   272  2 27 23:41 test
drwxr-xr-x   3 root  staff   102  2 28 01:37 tmp
drwxr-xr-x@  4 sogo  staff   136  2 27 23:41 vendor

オーナー変えときます。

# sudo chown -R sogo tmp

再度起動します

# ruby script/server    

http://localhost:3000にアクセスしたところ!
エラー出た!

/!\ FAILSAFE /!\  Sun Feb 28 02:46:20 +0900 2010
  Status: 500 Internal Server Error
  Expected /Users/sogo/code/rails/ec-rider0.8.1/ec_front/app/helpers/ec_rider/ec_helper/method_description.rb to define EcRider::EcHelper::MethodDescription
    /opt/local/lib/ruby/gems/1.8/gems/activesupport-2.3.4/lib/active_support/dependencies.rb:426:in `load_missing_constant'
    /opt/local/lib/ruby/gems/1.8/gems/activesupport-2.3.4/lib/active_support/dependencies.rb:80:in `const_missing'
    /Users/sogo/code/rails/ec-rider0.8.1/ec_front/app/helpers/ec_rider/ec_helper.rb:46:in `const_get'
    /Users/sogo/code/rails/ec-rider0.8.1/ec_front/app/helpers/ec_rider/ec_helper.rb:46
    /Users/sogo/code/rails/ec-rider0.8.1/ec_front/app/helpers/ec_rider/ec_helper.rb:46:in `each'
    /Users/sogo/code/rails/ec-rider0.8.1/ec_front/app/helpers/ec_rider/ec_helper.rb:46

少し調べてみたけど、なんでエラーになるのかよくわからなかった。
EcRider::EcHelper.const_defined?(:MethodDescription)がfalseになったためエラーのようです。
こういう構造になっているので本質的には問題ないはず。

module EcRider
   module EcHelper
     module MethodDescription
     end
   end
end

ただ、このconst_defined?が呼ばれる前にすでにロードされているので、不要じゃないか?と思ったので、ここの呼び出しの大元をコメントアウトしてみた。
helper群が

require 'ec_rider/ec_helper'

しているのが関係ありそう。
autoloadしてるからrequire不要じゃないかな?なんか上書きされておかしくなっているみたいに感じた。

ec-rider0.8.1/ec_front/app/helpers/ec_rider/ec_helper.rb の46行目をコメントアウトします
 45     class EcHelperImpl
 46       #TAG_MODULE_NAMES.each{|mod_name| include(EcHelper.const_get(mod_name))}


再度起動!

# ruby script/server    

http://localhost:3000にアクセス!
MissingTemplate!
f:id:tohtas:20100228042010p:image

確かにない!

# tree app/views/cms 
app/views/cms

0 directories, 0 files

どうしたらいいんでしょう?
ここでいったんストップです!