Leopard環境のRuby on Rails 2.3.3の簡単インストール方法。

システムが不安定だったので、再インストールすることになりました。
以前の記述だと、いろいろなエラーが出たので、再々インストールしたときの手順を記述します。
http://d.hatena.ne.jp/monote/20090404/1238829935


参考というかほとんどそのままコピペさせていただきます(><)
http://d.hatena.ne.jp/sawada0903/20090612/1244756957

1)OSを最新の状態に保つ
ソフトウェアアップデートによってOSを最新版にすること。
現時点だと、10.5.8です。

(2)ADCから最新版のXcodeをインストール
ほぼ1G近く、ダウンロードに30分を要します。
http://developer.apple.com/jp/

(3)MacPortsをインストール
http://www.macports.org/install.php
mac(Leopard)のファイルをダウンロード&インストールします。

(4)MacPortsをUpdateする
http://www.macports.org/
ここからターミナルを立ち上げます。
sudo port -d selfupdate
sudo port sync

※本来であればmysql5をインストールするのですが、
インストールをするとエラーになったので、後でにします。

(5)RubyをMacPortsでインストール
sudo port install ruby

(6)Ruby GemsをMacPortsでインストール
sudo port install rb-rubygems

(7)MacPortsからRailsをインストール
sudo port install rb-rails
※現時点では、上記通りだとrailsが2.2.2になるようです。
※gemでインストールする場合は下記の通り。でもエラーになったので注意が必要
sudo gem install rails


(8)再度アップデート
sudo port -d selfupdate
sudo port sync
sudo port -d selfupdate ... MacPorts本体とカタログを更新します
sudo port upgrade installed ... MacPortsでインストールされているパッケージを全て最新版にします
sudo gem update --system ... RubyGems本体を更新します
sudo gem update ... RubyGemsでインストールされているRuby関連パッケージを全て最新版にします

ターミナルを再起動して確認

Macbook13:~ mono$ ruby -v
ruby 1.8.7 (2009-06-12 patchlevel 174) [i686-darwin9]
Macbook13:~ mono$ rails -v
Rails 2.3.3
Macbook13:~ mono$ gem -v
1.3.5

Mysqlのインストール

------------
(9)portでMySQLとMySQLデーモンをインストール
sudo port install mysql5 sudo port install mysql5-server
(6)my.cnf(設定ファイル)を作成
sudo cp /opt/local/share/mysql5/mysql/my-small.cnf /etc/my.cnf
(7)my.cnfの設定(編集はvimなりemacsでも使って下さい)
・ソケットの場所変更
socket = /opt/local/var/run/mysql5/mysqld.sock
となっている所全てを
socket = /tmp/mysql.sock
に変更する。
・文字コードを設定 [mysqld] の下に
default-character-set=utf8
skip-character-set-client-handshake
を追記する
(8)MySQLの初期化
sudo -u mysql mysql_install_db5
(9)MySQL自動起動の設定
sudo launchctl load -w /Library/LaunchDaemons/org.macports.mysql5.plist

(13)port でrubyのMySQLアダプタをportから入れる
sudo port install rb-mysql
(14)Terminalの設定を変更(デフォルトシェルがbashの場合)
~/.profileに以下の一文を追加
alias mysql="mysql5"
(15)おもむろに再起動
方法はおまかせ(sudo shutdown -r now ・ sudo reboot ・ りんごマーク>再起動)
(16)MySQL接続の確認
mysql -u root
で接続できたら無事完了。後はrailsで適当なプロジェクトを作って実行して下さい。(mysql用dbオプションを忘れずに!)

restful_authenticationの設定

参考サイト
http://terrazilog.quipu.jp/?eid=585865

acts_as_state_machine のインストール

ruby script/plugin install http://elitists.textdriven.com/svn/plugins/acts_as_state_machine/trunk/

restful_authentication のインストール

ruby script/plugin install http://svn.techno-weenie.net/projects/plugins/restful_authentication/

セッション管理を利用するモデル(ここでは user)と
セッション管理用コントローラ(ここでは sessions)を生成
既存のモデルを上書きする場合、マイグレーションファイルだけは
上書きされないので、事前に削除しておくこと。

ruby script/generate authenticated user sessions --include-activation --stateful
    • include-activation

メールによる認証登録を行なう

    • stateful

acts_as_state_machine を利用したステート管理を行なう

config/routes.rb追加

  map.activate '/activate/:activation_code', :controller => 'users', :action => 'activate'
#
map.signup '/signup', :controller => 'users', :action => 'new'
map.login '/login', :controller => 'sessions', :action => 'new'
map.logout '/logout', :controller => 'sessions', :action => 'destroy'
map.resources :users, :member => {
  :suspend   => :put,
  :unsuspend => :put,
  :purge     => :delete
}

ActionMailの設定
config/environment.rb

config.action_mailer.delivery_method = :smtp
config.action_mailer.smtp_settings = {
  :address => 'your.smtp.domain',
  :port => 25,               # or 587 SMTP 設定に依存
  :domain => 'localdomain',  # 分かるなら FQDN を設定
  :authentication => :login, # SMTP 認証設定に依存
  :user_name => 'username',  # 認証がないなら削除
  :password => 'password'    # 認証がないなら削除
}

config/environment.rb

Rails::Initializer.run do |config|
config.active_record.observers = :user_observer

development環境下でメール送信に失敗したことが分かるように設定
config/environments/development.rb

config.action_mailer.raise_delivery_errors = true

app/models/user_mailer.rb

def signup_notification(user)
  setup_email(user)
  @subject    += 'Please activate your new account'
  @body[:url] = "http://localhost:3000/activate/#{user.activation_code}" # テストサーバのURLにあわせて
end
def setup_email(user)
  @recipients  = "#{user.email}"
  @from        = "ADMINEMAIL" # <- ここ
  @subject     = "[YOURSITE] "
  @sent_on     = Time.now
  @body[:user] = user
end