Rails



Sitemap | Profile | タグ一覧
最近の更新
ドライランのありがたみを改めて知る
2024/04/04
伊豆半島
2024/03/31
お出かけチェックリスト
2024/03/29
Ruby
2024/03/27
Kubernetes
2024/03/22
音楽データをDisplayAudioで聞く
2024/03/09
Redmine
2024/02/05
git
2024/02/02
経済
2024/01/08
どうする家康
2023/12/17
MX-Linux
2023/11/06
國體関連学-休学のご連絡
2023/08/13
Debian
2023/08/02
CentOS
2023/06/13
Dell-XPS13
2023/05/23
ベルト
2023/05/18
SourceForge
2023/04/17
確定申告
2023/02/19
さらば「まぐまぐ」
2023/01/09
風猷縄学
2022/11/23


[-] 1. assert_select

  1. 新規登録ボタン(<a>タグ)に属性が disabled があることを確認
    get :show, id: @record.id
    assert_select 'a[href*=/some/new]' do
      assert_select "[disabled=?]", /.*/
    end
    新規登録ボタン<a>タグの判定に href="/some/new" を使用し、 属性 disabled の値が空欄でないこと、という形で判定している。

[-] 2. options_for_select vs options_from_collection_for_select

1つにまとめられないかなぁ。

[-] 3. 子要素のメモリ上の属性に値をセットしておく際の注意点

子要素のメモリ上の属性 (仮に、アクセスしているユーザ upsert_user としよう) に値をセットして後で参照する際、消えている場合は、以下のどれか:

関連項目:mark_for_destruction

[-] 4. 疑問点

[-] 4.1. 解決した疑問

[-] 4.1.1. 2010/12/09

  • 下記疑問は解決(2013/02)。 column_before_type_cast という動的属性で、入力文字列を 取得することが出来るようになっている。
    • ざっとググると、かなり当初からの機能のよう。知らなかった…。

AR の errors のデータ構造は見直すべき。 そもそも入力が不正なのだから、いったん AR に入れて errors.full_messages したり f.text_field や f.date_select で表示させるのは変。

また、今日発覚したが、has_many 関係(Fac has_many FacIp)において、子要素 FacIp は同一親内でパターンはユニークであること、という制約が有る。これを csv ファイルの一括登録で行う場合、validtes_uniqueness は使えない(DBの検索に走るから)。従って、on-memory で detect を使ってシリアルスキャンし、存在しないか存在しても new_record? の場合、 一旦 build 後に自家製の validate_uniqueness_of_pattern を走らせている (→ 某 アクセス制御 parse_csv() メソッド)。 これも変な話で、データを params から AR に入れようとする段階で検証するのが正しいのでは?

つまり、AR 内に errors を持つのではなく、AR と 入力文字列(含む errors)を分ける、という構造が正しいのでは。

[-] 5. Rails 4

[-] 5.1. 初期化順序

  1. config/environments/*.rb
  2. config/application.rb
  3. config/initializers/*.rb

[-] 5.2. ActiveRecordStore

Rails4 になって、ActiveRecordStore は gem に括り出された。 で、独自のセッションテーブル Edgar::Sssn を使おうと思っているのだけど、 これまで(<= Rails3)のように自動で読み込まれない。…ということでソースを読む。

  • config/initializers/session_store.rb で session_store を設定する。
  • Application::Configuration#session_store (railties-4.0.2/lib/rails/application/configuration.rb) で ActionDispatch::Session::ActiveRecordStore を返す。
  • Rails::Application#default_middleware_stack (railties-4.0.2/lib/rails/application.rb) で ActionDispatch::Session::ActiveRecordStore を使うよう宣言する:
    middleware.use config.session_store, config.session_options
  • ActionDispatch::Session::ActiveRecordStore は activerecord-session_store-0.1.0/lib/action_dispatch/session/active_record_store.rb で定義されている。 これは ActionDispatch::Session::AbstractStore < Rack::Session::Abstract::ID を継承している。

[-] 6. Rails 3

[-] 6.1. asset pipeline

[-] 6.2. RJS

Rails 3.1 になって RJS ってなくなってたのね。変化早い…。

[-] 6.3. Rails 3.2

  1. 2012/06/18 時点、下記で 3.2.6 がインストールされる:
    $ gem install rails
  2. Edgar2作成
    $ mkdir -p jjedgar2/repo
    $ cd jjedgar2/repo
    $ rails new . -d postgresql
    http://www.rubyinside.com/dhh-offended-by-rspec-debate-4610.html によって Rspec/FactoryGirl は止め。
  3. bundle install
    1. Gemfile に gem 'pg' の行があることを確認
    2. unicorn: thin, Mongrel より速い webserver
      1. install
        $ gem install thin
      2. Gemfile の以下をコメントを外す:
        gem 'unicorn'
    3. bundle install
    4. Unicorn が立ち上がらないので thin で進める:
      #gem 'unicorn'
      gem 'thin'
  4. この段階で r s
  5. rake db:create
  6. $ rm public/index.html
  7. scaffold
    1. generate
      $ r generate scaffold Book author:string title:string
    2. migrate
      $ rake db:migrate
  8. http://localhost:3000/books

[-] 6.3.1. plugin

$ rails plugin new edgar
[-] 6.3.1.0.1. https://github.com/krschacht/rails_3_engine_demo を 3.2 で試す
  1. rake test が落ちる → Rakefile の test 部分に以下を追加:
    test.libs << '.'
  2. config/routes.rb で怒られる
    • → とりあえずコメントアウト

rake test 通った(^_^)/

[-] 6.3.2. Coffee Script

[-] 6.3.3. SCSS

[-] 6.3.4. 参考

[-] 6.3.5. 余談

rails 2.3 も入れた後で 'rails new' したとき下記エラーが発生:

/home/ruby/ruby-1.9.3-p194/lib/ruby/gems/1.9.1/gems/rails-2.3.12/lib/rails_generator/options.rb:32:in /`default_options': undefined method `write_inheritable_attribute' for /Rails::Generator::Base:Class (NoMethodError)
from /home/ruby/ruby-1.9.3-p194/lib/ruby/gems/1.9.1/gems/rails-2.3.12/lib/rails_generator/base.rb:90:in `'
  :

共存が問題かと思い uninstall rails -v 2.3.12 するが、

$ rails new EdgarCrm -d postgresql
/home/ruby/ruby-1.9.3-p194/lib/ruby/1.9.1/rubygems.rb:317:in `bin_path':
can't find gem rails ([">= 0"]) with executable rails (Gem::GemNotFoundException)
from /home/ruby/ruby-1.9.3-p194/bin/rails:23:in `
'

...収集つかなくなったので ruby 再インストールから行った orz

[-] 6.4. new Project w/Rspec

  1. プロジェクト生成

$ r new my_project -d postgresql

  1. Rspec を Gemfile に指定:

gem 'rspec-rails'

$ bundle install

[-] 6.5. 継承関係

  • Rails::Railtie
    • Rails::Engine
      • Rails::Plugin
        • Rails::Application
  • AbstractController::Base
    • ActionConroller::Base
    • ActionMailer
  • ActiveModel
    • ActiveRecord

[-] 6.6. Railtie

[-] 6.7. Config

[-] 6.7.1. config/application.rb

module MyApp
  class Application < Rails::Application
    ...
    config.hoge   = 'fuga'
  end
end
...
MyApp::Application.config.hoge

[-] 6.8. ActiveRecord

  • ActiveRecord::Relation を返す
  • 遅延評価
  • where
  • order
  • limit
  • join
  • merge(&)
  • MailAddress validator

[-] 6.9. ActionController

  • respond_with
  • flash[:notice]
    • notice に
    • redirect_to @post, :notice=>'...'
  • route
    • map.connect 'books/:id', :controller=>'books', :action=>'view'
    • match 'books/:id' => 'books#view'

[-] 7. Tips

[-] 7.1. Exception Gem::LoadError in PhusionPassenger::Rack::ApplicationSpawner

Ubuntu12.04 + ruby 1.9.3p194 + Rails 3.2.8 + passenger=3.0.17 の環境で 上記エラーが発生。引き続き下記のエラーも:

(You have already activated rack 1.5.2, but your Gemfile requires rack 1.4.5.
Prepending `bundle exec` to your command may solve this.)

bundle exec を付ける箇所が分からない。

何かのタイミングで入った rack 1.5.2 を削除することで解決した:

$ gem uninstall rack -v1.5.2

[-] 7.2. console

[-] 7.2.1. helper

helper.text_field(....)
[-] 7.2.1.1. カスタムヘルパを呼ぶ場合
helper.extend CustomerHelper
helper.customer_method(...)

[-] 7.3. カラム情報の取得

ARName.connection.columns('table_name')

[-] 7.4. controller

app 擬似インスタンスを使う

app.get("/admin/users/show/1")
app.url_for(:controller=>'admin/divisions')

require 'pp'
pp app

[-] 7.5. session

[-] 7.5.1. rails2.1.2

s = CGI::Session::ActiveRecordStore::Session.find ...
s.data

# autoload の絡みで ArgumentError: undefined class/module NodeType
# などと出る場合がある。ここで NodeType はモデルの一つ。
# とりあえず NodeType[enter] と打つことで切り抜けることが出来る。

[-] 7.6. migrate

[-] 7.6.1. カラム追加

$ jruby script/generate migration users
  ...
  def self.up
    add_column(:members, :unitcode, :integer, :default=>1)
  end
  def self.down
    remove_column(:members, :unitcode)
  end
  ...
  ※ ここで、members = テーブル名, unitcode = カラム名
$ rake db:migrate

[-] 7.7. fixtures のデータを手で save

integratio test 用 DB は unit test, functional test の fixtures base
とは別に用意していたのだが、fixtures のものを integration test 用に
コピーしたい場合:

  $ (cd int; RAILS_ENV=test script/console)
  >> oyml = YAML::load_file('test/fixtures/org.yml')
  >> Org.create(oyml['second'])
  >> ^D
  $ pg_dump DB_NAME

[-] 7.8. freeze/unfreeze

rake rails:unfreeze
rake rails:freeze:gems

[-] 7.8.1. 指定バージョンで freeze

rake rails:freeze:gems VERSION=1.1.6    # or
rake rails:freeze:edge TAG=rel_1-1-6
確認:
script/about

[-] 7.9. URL パラメータの扱い

[-] 7.9.1. hash -> params

{:a=>1}.to_query

[-] 7.9.2. params -> hash

Rack::Utils.parse_query('act=WPOINT&aid=a-app&data=MDE7MDI7MDsxMjM0NTY3ODkwMTIzNDU2OzA7MTIzNDU2Nzg5QUJDREVGMTIzMUY7MDswOzQzOzAx%250D%250AOzA0OzAwMDAwMDAwMDAwMDAwOzAwMDA6MjAxMTAxMjAxMjE1MTE7MDAwMDAwMDAwMDAwMDAwMDsx%250D%250AMjM0NTsxMjM0NQ%253D%253D&dni=1&dnm=1&liid=soba000000000L01&liky=a0000001&msg=g3yDQ4OTg2eSypBNg4yDWIN8g5ODWA%3D%3D%0A&rdate=20110122123118&rdt=20100706000000&secd=SECD&sim=01234567890123456789&skcd=XX&srcd=soba&sscd=ISP00001&tid=012345678901234&tidm=helloworld&tnm=4&ver=1.1.1')

が便利。

CGI::parse('...')

は、多値をサポートしているため厳密だが、rails 的ではない。

[-] 7.9.3. base64 decode:

Base64.decode64(str)

[-] 8. Mongrel

|           ProxyPass            RAILS_ROOT
|            設定                  設定
|  Apache -----------> Mongrel-1 ----------> RailsApp
|                +---> Mongrel-2 ----------> RailsApp
|                :       :                     :

[-] 9. Rails2

[-] 9.1. 2011/05/09 link_to lable, ... はエスケープされない。

これは痛い。 Rails3 ではエスケープされるとのこと。

[-] 9.1.1. トランザクション関係

(Rails1 の時代の話だったかも)

  1. 例外を使用するとエラーメッセージが保存されない(-> AWDwR 初版 p.254)
    -> Rails2 では直っているようだ。
  2. Rails は親を保存する時に1つのトランザクションで子供も自動的に保存する、というが、 そうならなかった。
    • app/controllers/ext_interface_config_controller.rb rev.761 attributes の代入だからか?
    • transaction で囲みつつ、save() を使い false 時に明示的に raise することで問題を解決する、というので両方を満足できないか?

[-] 9.2. 2.x その2

project で 2.0.2 を使うようなので retry

[-] 9.2.1. gem upgrade

rails 2.x は gem 0.9.4 以上を要求するが etch の gem は 0.9.0 なので update する:

$ sudo gem update --system

[-] 9.2.2. rails 2.0.2 install

$ umask 022; sudo gem install -v=2.0.2 rails --include-dependencies  --no-rdoc --no-ri
$ rake

[-] 9.3. 2.x

-> 断念。 etch では rails install 時に gem 0.9.4 以上を要求するため。

[-] 9.3.1. install

umask 022; sudo gem install rails --include-dependencies --no-rdoc --no-ri で rails 2.0.2 が入る。

[-] 9.3.2. create project

ruby /var/lib/gems/1.8/bin/rails jalt

[-] 10. Rails 勉強

[-] 10.1. 質問事項

??

StaleObjectError は save() 時に発生し、valid?() では検出できない!
'07-08-07 発見。

??

error_messages_for → redirect_to() で使えない。

flush[] → redirect_to() で使える。
...という差異が痛い。

??

initialize() と validate() が分離しているのは、使う側としては
使いやすいが、実装者にとって大変ではないか。

[-] 10.1.1. 例1

例えば、2月31日のような日付をチェックする Date 型を扱う場合を
考えてみる。
   
  1. フォーム入力する
  2. Model を フォームより new/create する
  3. invalid かどうかは save() 時に分かり、そのときはフォーム画面に 戻って、入力フォーム値(2/31)を正しく表示する
...とする。この場合、record.dt は Date 型だが、2/31 を正しく表示させる ためにはどうすれば良いだろうか?Date型には 2/31 は持ちえないので、 別に文字列として持っておかないと 3. で 2/31 を表示できない。

Rails は 1.1.X 時点でこの問題を解決していない。某 lib/mpaerr.rb はエラー時に文字列を動的に生成・保持することで対応している。

一つの思いつきだが、 a) form ↑↓ b) form object ↑↓ c) Model object と分けるのはどうか。c) で Model.new した時点で error になれば、 b) -> a) の流れで invalid 値を表示できる。c) にわざわざ 2/31 を 保持するものを持たなくて済む。

[-] 10.1.2. 例2

もっと簡単な例が見つかった。id (整数値) だ。
id は整数値なので 0-9 以外の文字列はあってはならない。
が、initialize() と validate() が分離しているので、initialize() 時に
validate() 時にチェックしていたのでは遅すぎる。例えば:

   def initialize(hash)
      @id = hash['id'].to_i   # ここで integer化すると...
   end

   def validate
      if @id !~ /^\d+$/ then  # ...ここで文字列として check できない。
         ...
      end
   end

??

Date型の validation が難しい。
GUI(選択肢)から例えば 2/31 とか入れると、validation の前にエラーになる。

-> 既に FAQ のようだ:
   http://www.fdiary.net/ml/rails/msg/724

??

validate fail 時、redirect_to() が使えないのは痛いな。
(redirect_to すると error_messages_for() が使えない。instance 変数に
入れられた error message が redirect_to でクリアされてしまうから)

??

business-logic はモデルなのだが、Rails では 1つのトランザクションを
model層に記述できるのだろうか?

??

create() は変な仕様だ。
例外を挙げる create!() が別に存在するのだが、エラー時に
<%= error_messages_for 'usr' %>
とするためには create() を使わないといけない(create!()を使って
エラーになると、戻り値自体が nil になり、
error_messages_for 'usr' でエラーを表示できないから)。
しかし create() を使うと、Usr.transaction do ... end とできない。
(create() はエラーでも例外を発生しないから)。
よって、transaction を使いつつ、エラー時は例外を捕捉するためには、
妙な構文が必要になってくる:

   Usr.transaction do
      @usr = Usr.creat(params[:usr])
      if @usr.errors != nil then ...
      end
   end

??

error_messages_for() は object につくのではなく transaction に
つくのではないだろうか。。。

??

work/depot/app/controllers/store_controller.rb::add_to_cart
にあるような redirect は必要なのだろうか。view の指定は
外部からできないのか?

??

flash[] は奇妙な位置づけだ。session 情報にまとめられないのだろうか
また、flash[] + redirect の方法と、on memory template の方法の
どちらが有効だろうか?

??

app/views/layouts/* は必要だろうか? SSI の #include 相当で
十分ではないだろうか?

→いや、なかなか便利だ。決まりきった部分を #include にまとめてもよいのだが、
それすらも必要ないのも潔い

??

validates_presence_of() は not null から自動生成できないのだろうか?

??

error_messages_for() は flash で代用できないのだろうか?

??

Store::display_cart は、単にカートの情報を表示するだけなのだが、
いちいちインスタンス変数 @cart, @items にセットしないといけないのは
無駄ではないだろうか?

??

render_component() によるテンプレートの再利用はややこなれてないような
印象を受ける。view がいくらネストしていようと、view は Model を
表示するだけ、とできないのだろうか?

??

depot/app/controllers/admin_controller.rb にて、order 対象を検索し、
ship date をセットし、保存している。これは controller の仕事だろうか?

??

database_manager => CGI::Session::MemoryStore
FastCGI session-affinity であれば非常に良いと思うのだが、
AWDwR p.320 には、「好ましくない」とのこと。が、理由が詳述されてない。

[-] 10.2. 気になった点

  1. 子要素の errors の扱いが面倒。
  2. ar.valid? が状態を持つのは変では?
    • ar.errors にエラー結果を入れるため、状態を持つのは仕方ないにしても...。
    • validation に時間がかかる場合、valid? 実行後に valid? を見るには ar.errors.empty? で判断しないといけないのがあまり美しくない。

(あまり重要ではないが気になったことのメモ)

??

DBへの保存に3種類ほど用意している点:

1) order = Order.new
   order.name  = "..."
      :
   order.save

2) order = Order.new(
      :name => "...",
         :
   )
   order.save
3) Order.create(
      :name => "...",
         :
   )

→ が、すぐに納得いった。3) は、formパラメータから直接 object を
生成できるからだ:

   order = Order.create(params)

??

find_by_*() は必要か?

??

ActiveRecord の代わりに Iterator を考えたり。

??

エラーメッセージの印字が error_messages_for とモデル別なのだが、
複数のモデルからなるエラーメッセージをまとめて表示するには?

[-] 10.3. 素晴らしい点

redirect と flash[] がうまく統合できている点。


redirect を単なるページ遷移として使える。

??

外部キーをセットする必要がない。

session[]


検索条件も session[:cond] = params[:cond] の一行で簡単に セッション中保持・読み出しができる。これはすごい。

[-] 10.4. 参考になった点

「リファクタリングはその場でやっとけ」

"AWDwR" の中で、似た部分が出たら後回しにせずすぐその場で括り出しておく
ことを勧めていた。つい後回しにしがちな私としては参考になった。

例外か nil かに関する哲学:

find(id) が見つからない場合 -> 例外
find(condition...)で見つからない場合 -> nil

[-] 11. Install

[-] 11.1. Ruby

  1. 古い Ruby (/usr/bin/ruby)との混乱を避けるため、/usr/bin/ruby は rm か rename しておく。
  2. script/console (Rails ツール) を使うには readline が必要なのだが Vine3.2 ではなく、後で

/usr/local/lib/ruby/1.8/irb/completion.rb:10:in `require': no such file to load -- readline (LoadError)


となる。これを避けるため、あらかじめ入れておく。Vine3.2 では、
  1. ncurses5-devel
  2. readline-devel
に当たるようだ。

  • install後のライブラリ *.so の permission が変なので、

    あらかじめ umask 022 しておく。

  • Vine3.x には ruby1.8.2(2004-11-03)が入っており、rails

    の期待するバージョン(1.8.2(2004-12-xx)でなくエラーとなる。
    そこで、ソースからダウンロードして install する。
    

    (2007-01-26 追記) 2006年7月に 1.8.4 を入れていたのだが、今になって プロダクション環境 (debian. 1.8.2 2004-12-25版) を考慮してなかった ことに後悔。開発環境も合わせておく必要があるので、1.8.2 を ruby-lang サイトからダウンロードして入れることとする: ftp://ftp.ruby-lang.org/pub/ruby/1.8/ruby-1.8.2.tar.gz

    $ su
    # umask 022
    # ./configure
    # make
    # make test
    # make install
    

  • readline が入っていたかどうかこの段階で知る方法を知らないが、 下記の方法で install できる:
  • $ umask 022 $ cd RUBY_SOURCE/ext/readline $ ruby extconf.rb $ make $ sudo make install

  • [-] 11.2. Postgres

    1. synaptic(or apt-get)などで下記を:
      1. postgres
      2. postgresql-server
      3. postgres-devel
    2. install後、postgres ユーザで createuser [MYNAME] などして他ユーザを追加する。

    [-] 11.3. RubyGEMS

    production 環境では gem は使わないそうなので、必要なければ install しない。
    Rails 自身を入れる際必要なのだが、こういう事情であれば、gem に依存しない
    Rails 環境を手にいれるしかないかも。
    

    後、fastercsv を使用しているのだが、これも install 自体は gem 経由だったが、 gem に依存しないよう、lib/ 下に置くことで対応する。

    [-] 11.3.1. GEM install memo

    AWDwR に従って 0.9.0 を入れたが、Ruby のバージョンをアップしたら再度 install
    しないといけないようだ。
    

    Note(Dynabook SS)に install するときに 30分ほどはまった。 現象:

    /usr/local/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:27:in `gem_original_require': no such file to load -- zlib (LoadError)
    

    from /usr/local/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:27:in `require'

    :

    :

    http://groups.google.com/group/comp.lang.ruby/browse_thread/thread/2f1cb78babb877d4/1f0f23ce30f54d31?lnk=gst&q=gem_original_require&rnum=1#1f0f23ce30f54d31
    
    (Google で 'gem_original_require' で引っ掛かった compl.lang.ruby で再検索でひっかかった) を見ると、zlib.so のパスが関係しているようだ。とりあえず下記で解決:

    # cd /usr/local/lib/ruby/1.8/i686-linux # ln -s /usr/lib/ruby/1.8/i386-linux/zlib.so zlib.so

    
    
    '06-12-07 追加: ruby-1.8.5-p2 を入れると、zlib.so は入っていたが、
    同じ現象が見られた。この時は、ruby-postgres をまだ入れてなかったために
    発生した。ということは、必要なライブラリがない場合に一般的に見られる
    現象と言える。

    [-] 11.4. Rails

    [-] 11.4.1. 1.2.6

    1.1.4 に致命的なセキュリティの穴があるので、1.2.6 を入れる。 --no-rdoc, --no-ri したせいか数分で終わる。

    umask 022; sudo gem install rails --include-dependencies --version "1.2.6" --no-rdoc --no-ri
    
    config/environment.rb の書き換え:

    RAILS_GEM_VERSION = "1.2.6"

    [-] 11.4.2. 1.1.4

    Dynabook に何も考えず入れると 1.1.6 が入り、desktop(1.1.4)のパッケージが そのままでは動かないので、バージョンを指定して install しよう:

    umask 022; sudo gem install rails --include-dependencies --version "1.1.4"
    

    なお、今回は 1.1.6 を入れてしまったのでハマッたわけだが、1.1.4 を
    再インストールしても直らず、config/environment.rb の
    RAILS_GEM_VERSION の行を修正することで対応できた:

    :

    #RAILS_GEM_VERSION = "1.1.6"

    RAILS_GEM_VERSION = "1.1.4"
         :

    AWDwR に従って入れたが、Ruby のバージョンをアップしたら再度 install しないといけないようだ。

    10〜20分かかる。

    [-] 11.5. Ruby-Postgres

    http://ruby.scripting.ca/postgres/
    から ruby-postgres-20051221.tar.gz をダウンロード。が、
    
    
    ruby: relocation error: /usr/local/lib/site_ruby/1.8/i386-linux/postgres.so: undefined symbol: PQserverVersion
    と出る。PQServerVersion は 7.4.X では無いようなので、下記にあるように コメントアウトしてみた:

    177c177
    < 
    ---
    > /*
    181c181
    < 
    ---
    > */
    1099c1099,1100
    <     return INT2NUM(PQserverVersion(get_pgconn(obj)));
    ---
    >     return INT2NUM(70410);
    >   /*return INT2NUM(PQserverVersion(get_pgconn(obj)));*/
    

    あと、なぜか DynaBook で make でエラーとなるので、ruby extconf.rb も
    下記とした:
    

    $ ruby extconf.rb --

    [-] 11.6. まだエラー @ Dynabook

    no such file to load -- digest/sha2(LoadError) が出る。
    どうも /usr/local/lib/ruby 下の *.so の other permission が ---
    だったのが原因のようなのでこれを直す。

    [-] 12. depot

    Postgres 版の作業をここにメモ

    $ rails -d postgresql depot
    $ createdb depot_development
     (createdb -E UTF8 depot_development   #UTF8版)
    $ psql
    drop   table products
    create table products (
        id               serial         not null
       ,title            varchar(100)   not null
       ,description      text           not null
       ,image_url        varchar(200)   not null
       ,price            decimal(10,2)  not null
       ,date_available   timestamp      not null
    
       ,primary key   (id)
    );
    
    create table orders (
        id               serial         not null
       ,name             varchar(100)   not null
       ,email            varchar(255)   not null
       ,address          text           not null
       ,pay_type         char(10)       not null
       ,shipped_at       timestamp          null
    
       ,primary key(id)
    );
    
    create table line_items (
        id               serial         not null
       ,product_id       int            not null
       ,order_id         int            not null
       ,quantity         int            not null default 0
       ,unit_price       decimal(10,2)  not null
    
       ,constraint fk_items_product foreign key(product_id) references
          products(id)
       ,constraint fk_items_order   foreign key(order_id)   references
          orders(id)
       ,primary key      (id)
    );
    
    create table users (
        id               serial         not null
       ,name             varchar(100)   not null
       ,hashed_password  char(40)       null
    
       ,primary key(id)
    );
    
    $ script/generate scaffold Product Admin
    $ script/generate controller Store index
    $ script/generate model LineItem
    $ script/generate model Order
    $ script/generate model User
    $ script/generate controller Login add_user login logout delete_user list_users






    Generated by juli 2.3.2