Ruby on Rails¶
不具合¶
- ruby 1.8.7 p249 を入れると、Railsの実行ログに日本語を出力する場合に日本語が化ける
ruby 1.8.7 p249 にはStringのinspectにバグがあり、ログ出力などでpを使った場合に日本語が化けるようである
- windowsな環境で、Railsプロジェクトのパスに日本語が含まれる場合、もしかしたらRailsプラグインを認識しない事があるかもしれない
- windowsでMySQL5.1を入れると、Railsから接続できないっぽい
おそらく、gemでインストールするmysqlアダプタがMySQL5.1に対応していない
筆者の解決方法は、coLinuxでlinuxを起動し、共有フォルダとしてrailsのプロジェクトを参照して
linux内に実行環境を作る
windows上ではeclipseで編集&SVNコミット
※最近、gemのmysqlが更新され、2.8.1を使用できるようになった
このバージョンでならMySQL5.1が使用できるかもしれない
新着メモ¶
- Factory Girl
fixtureなデータを自動生成
- ColumnCommentsプラグインの改良
ColumnCommentsプラグインが、decimal型のカラムを扱うときにschema.rbファイルがおかしくなるのを修正している
- JasperReportsをRailsから呼び出す
リニューアル
RJBを介してJasperReportsの処理を呼び出す方法に変更
この方法で、JasperReportsの処理を実行する際に毎回JVMを起動するというコストが削減される
ただし、railsのインスタンスと共にJVMが常駐するので、メモリ消費が心配ではある
- Nested Object Forms
フォーム上で、複数の関連したモデルを一度に表示、更新
要するに、入れ子状態のモデルをフォームで扱える機能
Rails 2.3 から追加になった
- VMWare Playerを使ってWindows上でCentOSの実行環境を作る
以下の内容のVMWare Player版ですが、VMWare PlayerはホストOSとのファイル共有が使用できる
これを使うと、前のcoLinuxでのファイル共有のような不具合は見られず、VMWare Server 2の時のようなSambaを立てる必要もなく
快適に開発が出来るようである
また、ゲストOSがCentOSであるため、VMWare カーネル準仮想化の機能が使用できる
この機能をONにすると、若干ゲストOSの速度が上がるようである
- VMWare Server 2を使ってWindows上でCentOSの実行環境を作成
VMWare Server 2は、ホストとのファイル共有が使えないため、ゲストOSのCentOSにSambaサーバを立てて
ホストOSからCentOS上の共有を見に行く作りにしなければならない
その場合、eclipseなどでプロジェクトを参照するとえらい事になる…
- ZenTest(autotest)
- 浮動小数点問題
1.0 - 0.9 == 0.1
この結果がfalseとなる
これを解決するには
require 'bigdecimal' a = BigDecimal(1.0) b = BigDecimal(0.9) a - b == 0.1 true
- firefoxのオートコンプリート
firefoxを使ってログイン時にオートコンプリートでパスワードを保存すると、
別のページの<input type='password'> が存在するフォームに
自動的にログインIDとパスワードがセットされてしまう。
解決法は
<% form_tag( {:action => :create}, :autocomplete=>"off") do -%>
- viewの中で現在のアクションの名前を取得する方法
controller.action_name
- 延滞ロード
とりあえず、すぐ表示できる部分は表示してしまって
重い処理の部分(一覧処理とかTOP10とか)を後からロードするための方法
- prawn
prawnってなんだ?
PDFが簡単に作れるのか?
http://guides.rubyonrails.org/actioncontroller_basics.html#_streaming_and_file_downloads
サンプル¶
Railsプラグイン¶
rubyプラグイン¶
Ruby本体に関する情報¶
メモ(2.3.4)¶
- seeds
初期データの設定
- プラグインのI18n
プラグインで定義したlocaleファイルを自動的に参照
メモ(2.3系)¶
- Templates
Allows your new skeleton Rails application to be built your way with your default stack of gems, configs, and more. - Engines
Share reusable application pieces complete with routes that Just Work, models, view paths, and the works. - Rack
Rails now runs on Rack which gives you access to all the middleware goodness. - Metal
Write super fast pieces of optimized logic that routes around Action Controller. - Nested forms
Deal with complex forms so much easier.
メモ(2.2系)¶
- active_scaffoldは安定版で2.2対応の物がないので、自分プロジェクトでは最近使ってない
メモ(2.1系)¶
- active_scaffold 1.1.1 は起動出来ない
redmine 0.7.1 は起動できない
rake rails:updateを実行すれば起動できるようだ
メモ(2.0系)¶
- default_url_options[:host]
url_for(:only_path => false)や、root_urlなどを使う(フルパスのURLを取得する)場合、default_url_options[:host] = 'ホスト名[:ポート]'を設定しておかないと、エラーとなる
どこに書くのがいいのか、要調査
1 config.action_mailer.default_url_options = {:protocol => 'https', :host => 'gendosu.ddo.jp'}
- named_scope(2.1.0以上でした)
- CSRF対策を一部のアクションだけ解除
Rails2.0だと、外部からpostリクエストを受け付けると、InvalidAuthenticityTokenが発生するが、その場合に
POSTで受けたいけどCSRF対応を解除して受け付けたい場合、
コントローラの頭に
protect_from_forgery :except => :view
なんて感じでチェックをスルーさせたいアクションを記述すると、そのアクションに対しては外部からPOSTしても例外にならない
メモ¶
- Colinux-coLinuxでRuby_on_Railsの実行環境を作成 を参照
※ホストOS側のフォルダを共有してRailsを起動した場合に、ファイルシステムでセッションを管理すると、正常に動作しない
coLinux内のゲストOSでsambaを使用して、そこにあるRailsプロジェクトをホストOS側のeclipseで参照する事で解決?
- consoleのリロード
reload!
- 一つのフォームで複数モデルを対象に更新したい場合(fields_for)
- RadRailsでのデバッグ(ruby-debug-ide)
- capture and content_for
viewの一部をテンプレート化出来る? 要調査
- マイグレーションで直接SQLを実行させる
execute(<<-SQL) insert into articles select * from old_articles SQL
- モジュール構造を使う
app/model/article.rb => app/model/blog/article.rb
- 無限スクロール
ページが複数ある画面で、画面の一番下までスクロールすると、自動的に次のページを読み込み、最下部に追加してくれる機能
検索結果なんかのリストで、次のページへの移動リンクをクリックする必要が無くなる。
- railsのバージョンを固定する(rake rails:freeze:gems)
- バージョンを指定してrailsプロジェクトを作成
rails _1.2.6_ my_proj
- attr_accessible
モデルでattr_accessibleを指定した場合、それ以外のカラムはプロテクトに設定される
カラムとして、:name, :email, :crypt_passがあるとしたら
attr_accessible :name, :email
とすると、:crypt_pathはプロテクトにされて、外部から参照、更新できない
- current_pageチェック
current_page?(:controller => 'top', :action => 'index')
でチェックできる
- active_heartなどerror_messages_forヘルパーを上書きする日本語化で不具合がある場合
active_scaffoldとactive_heartを入れてる場合に、active_scaffolの日本語化が優先されるらしく
うまく日本語化されない
- JasperReportsをRailsから呼び出す
javaで動作し、PDF,xml,xlsなどのフォーマットで出力出来るツール
- Railsでexcel出力するプラグイン
javaのPOIライブラリを使う
- render_component
処理が重くなるので、使用しない方向で
- rakeのバージョンを指定して実行したい
rakeコマンド実行時に以下のメッセージが出る場合などに、rakeのバージョンを指定する必要がある
undefined method `last' for {}:Hash rake db:migrat
- テーブルの~_idカラムにインデックスを設定すると速度が上がる
- 独自のエラー画面表示処理
rescue_action_in_public(exception)
rescue_action_locally(exception)
メール関連¶
webサーバ関連¶
- Passenger(mod_rails)
apache のモジュール
nginx もサポート
Railsをapacheで直接動かすことが出来るようになる- x_sendfile
apacheのモジュールつながりで、Railsで扱う画像ファイルを、直接apacheで処理させる事が出来る
- x_sendfile
便利ツール¶
- DBDesigner 4 Distributions
データモデリング図を書くツール
データベースにテーブルを直接読みに行ける
- A5:SQL Mk-2
DB Desinerと同じようなツール
データモデリング図を書くツール
データベースにテーブルを直接読みに行ける
開発環境¶
- Windows
- Ruby
- rubygems
Windows版のOne-Click Installerの場合、rubygemsも同梱 - Rails
- MySQL
- MySQL-rubyバインディング
- SQLite3
- SQLite3-rubyバインディング
- eclipse と Aptana Studio
または netBeans
Ruby on Railsに関連するツール¶
- CMS
- Radiant CMS
HPなどを手早く管理するには良いかもしれない。
Rails上に環境が作られるので、サポートツールという訳ではない - Railfrog
Railfrogの特徴としては、なぜか本体としてはソフトウェアを提供せず、プラグインとして提供している点にある。
本体と切り離されているので、コマンド一つで導入できるというメリットがある。さらに次の予定としてgemで配布する方針も予定されている。 - Mephisto
- RCMS
- Radiant CMS
- プロジェクトマネージメントツール