設定に関するメモ
nginxに関するメモ。
ちなみに環境は自宅鯖に使ってるUbuntu9.10+nginx1.0.6
いつからだったか、インストール(設定)ディレクトリが『/etc/nginx/』じゃなくなってたことをすっかり忘れてた。
最近は『/usr/local/nginx/』こっち。設定ディレクトリはその下にあるconf。
プロクシの設定は、更にその下にあるsites-vailableの中でもいいっぽいけど、現在は『nginx.conf』にベタ書きしてた。
$ sudo /usr/local/nginx/sbin/nginx -s
で停止とか、リロードのシグナルは送れるっぽいんだが、restartはないみたい。なので再起動したかったら一回stopで止めて、その後
$ sudo /usr/local/nginx/sbin/nginx
で再起動。
ただ、設定ファイルの書き換えぐらいなら『-s reload』でもOKそう。
reopenってシグナルもあったんだが、これはなんだろう。。。うーむ。。。。
使いこなすにはまだ当分時間がかかりそうだ(;´∀`)
[ruby][rails][postgresql]Rails3にgem pgをインストール
仕事の関係でpostgresqlでrailsすることになったので、最低限のコマンドだけメモ。
$ sudo aptitude install postgresql $ sudo aptitude install postgresql-server-dev-8.4 $ bundle install
最初はpostgresqlパッケージだけをインストールしたあとに、Gemfileに『gem 'pg'』と書いて『bundle intall』したら駄目だった。
『postgresql-server-dev-8.4』もインストールして『bundle install』したら大丈夫だった。
ひょっとしたら『postgresql-server-dev-8.4』だけでもインストールだけならできるのかな?
EmacsでRubyの開発環境を整えてみた
細かいことは後日記載。。。
参考URL
Emacs で Ruby 開発環境 - どんならんな
anything導入のeverything 〜3分で使えるanything.el〜 - http://rubikitch.com/に移転しました
Rubyのメソッドの補完を行うanything-rcodetools.elをリリース - http://rubikitch.com/に移転しました
汝の隣人のブログを愛せよ | LOVELOG
Rubyでコード補完はrct-complete-symbolをどうぞ - http://rubikitch.com/に移転しました
Emacs ビギナーに贈る、これからバリバリ使い隊!!人のための設定講座 その1。 - 日々、とんは語る。
汝の隣人のブログを愛せよ | LOVELOG
Emacs / Meadow の覚え書き - Meadow TIPS
Rsenseというのもあるらしい。こんど調べてみよう。
http://developmemo.seesaa.net/article/156234044.html
[rails][rails3]ActiveRecordのassociationに関するメモ
【コード1】
class Parent < ActiveRecord::Base has_many :children end class Child < ActiveRecord::Base belongs_to :parent # その他、自分自身のvalidationコードを以下に記載・・・ validates :hoge, :presence => true validates :fuga, :presence => true end
としたときに、
【コード2】
require 'test_helper' class AuthorTest < ActiveSupport::TestCase test "author_names test 1" do prm = { :wible => "ccc", :boo => "ddd", :jeb => "eee" } parent = Parent.new(prm) assert parent.valid? ch = Child.new({ :hoge => "aaa", :fuga => "bbb" }) assert ch.valid? p "parent.id is " + parent.id.to_s # 当然、この時点ではIDはない p "ch.id is " + ch.id.to_s parent.children << ch p "parent.id is " + parent.id.to_s # この時点でもIDはない p "ch.id is " + ch.id.to_s assert parent.save p "parent.id is " + parent.id.to_s # IDができる(DBに保存される) p "ch.id is " + ch.id.to_s end end
これはまぁいい。
ところが
【コード3】
class Parent < ActiveRecord::Base has_many :children end class Child < ActiveRecord::Base belongs_to :parent #### 以下のvalidationを追加!! #### validates :parent_id, :presence => true #### 追加おわり!! #### # その他、自分自身のvalidationコードを以下に記載・・・ validates :hoge, :presence => true validates :fuga, :presence => true end
というふうにすると、さっきのテストの挙動が変わってくる。
【コード4】
equire 'test_helper' class AuthorTest < ActiveSupport::TestCase test "test parent-children" do prm = { :wible => "ccc", :boo => "ddd", :jeb => "eee" } parent = Parent.new(prm) assert parent.valid? ch = Child.new({ :hoge => "aaa", :fuga => "bbb" }) assert ch.valid? p "parent.id is " + parent.id.to_s # 当然、この時点ではIDはない p "ch.id is " + ch.id.to_s parent.children << ch p "parent.id is " + parent.id.to_s # この時点でもIDはない p "ch.id is " + ch.id.to_s assert parent.save #### ここでsaveできず、assertionにひっかかる!! #### ## 以下は実行されない ## p "parent.id is " + parent.id.to_s # IDができる(DBに保存される) p "ch.id is " + ch.id.to_s end end
associationでは、parent_idのvalidatioで"validates :parent_id, :presence => true"とはしないほうが良さそう。やりたい気持ちはすごくあるが、保存のタイミングによってこのvalidationをつけるかいなかが変わってくると思う。
個人的に思うに、まずparentが先に必ずDBに保存され、その後に追加でchildをparentに関連付けるという処理なら":presence => true"はつけてもOKだと思う。
でも、parentとchildを同時に保存する場合は":presence => true"はつけない方が良さそう(【コード1】)。
rails本だとこのような場合は、先にまずchildを確実に保存し(保存するときにsave!メソッドを使うと書いてあった)、次にparentを保存し、最後にparentとchildを関連付けるのが確実というようなことが書いてあった。ただ、この場合トランザクションにして、途中でエラーが発生したらロールバックできるようにしておかないとかな。
先にchildを保存するならどちらにしろ"validates :parent_id, :presence => true"の検証は付けられない。
結論としては、parentとchildを同時に保存することがある場合は、Childクラスに"validates :parent_id, :presence => true"の検証は付けないほうが無難だと思う。
追記
と思ったら違った。何が違ったかというと、"rails本だとこのような場合は、・・・"のくだり。あれはあくまで既に親レコードが存在し、その上で子を追加する場合の処理だ。
rails本によれば、親レコードを保存するときに関連する子レコードも一気に保存するが、これは自動でトランザクションにラップされているとのこと。つまり結局【コード2】がベストだと言うことだと思う。
つまりアルゴリズム的には
①子の検証→【エラーの場合】エラー処理
↓
②親の検証→【エラーの場合】エラー処理
↓
③子を親に代入
↓
④親を保存→【エラーの場合】トランザクションでラップされるのですべてのレコードは保存されない
という感じにするのがベストだろう。
rails3でwill_paginate
メモ。参考URLの通り。
[rails]mysql2のインスコ
rails3からMySQLへの接続にはmysql2というアダプタを使うようになったみたい。
それを知らずに
$ rails new hoge -d mysql
って感じでMySQLを使うrailsアプリをつくるとうまく動きませんでした。
ってことでmysql2のインストール。
でもそんな難しいことはやってなくて
$ sudo aptitude install libmysqlclient-dev $ gem install mysql2
でOKみたい。
今回は、上で書いたようにmysqlを使うrailsアプリを最初につくって、そのルートディレクトリで
$ bundle instal
としました。
そしたら勝手にはいる。