メモ

ActionMailerでSMTPにGMailを使う

環境はRails2.0.2,Ruby1.8.6です。 ActionMailerのdelivery_methodに今までsendmailを使っていたのですが、本番アドレスでのDNSの設定に行儀よくspfを設定してあげたので、合わせてrails側の送信もSMTPにする必要が出てきました。ちなみにメールサーバはGoog…

Ubuntuでrubygemsを1.0.1にudpateしたら"uninitialized constant Gem::GemRunner(NameError)"のエラー

環境:Ubuntu 7.10, rubygems 9.0 こちらに書いてある通り、 sudo gem update --systemを実行したところ、gemコマンドやmongrelの起動で /usr/bin/gem:23: uninitialized constant Gem::GemRunner (NameError)というエラーが出るようになりました。一応、Rai…

Railsでマスタデータをロード(インポート)するためのrakeタスクを作ってみた

(注)動作確認はRails2.0.1 設定データやテストデータをテーブルへ流し込むために、今まではDB側の機能を使っていたのですが(load data infileとか)、少々面倒くさくなってきたのでAWDwR(2版)を調べて見たところ、p252あたりにデータロードに関する記述を見つ…

AjaxでRedirect

(注)動作確認はRails 2.0.1 小ネタですが少し引っかかってしまったので参考まで。Ajaxは画面遷移を伴わないので、例えばデータ作成が成功したら詳細画面に飛ぶような処理をしたい場合、サーバからURLを渡してクライアント側で遷移する処理(location.href)を…

ActiveRecordでパスワード(Password)を上手に保存する

(注)確認環境はRails2.0RC1ですが、多分1.2.XでもOK やはりパスワードをDBに生でいれるのはどうかと思うので、 before_save {|user| user.password = Digest::SHA256.digest(user.password)} こんな感じに書いてやりましたところ、新規登録時は問題ないので…

Railsで設定ファイル

(注)動作確認はRails2.0RC1。多分1.2系でもOK。 Railsで自前configというかメッセージリソースと言うかの標準的な方法がいまいち分かりません。一応この辺も踏まえつつ、前のプロジェクトで教えてもらったのを参考に*1こんな感じで作ってみました。以下でパ…

Rails2.0 Railsでuuid

(注)動作確認環境はRC1です。 今までユニークなidを作るためにuuidtoolsを使っていたのですが、rails2.0では CGI::Session.generate_unique_id でOKなことを発見。コメントに # This is used to generate session ids but may be reused elsewhere. とあるの…

Rails 2.0の新しいセッション管理-CookieStore

(注)この記事の動作確認環境はRC1です。 以前、Railsはデフォルトでtmp/sessionsにセッションファイルを作り続けるため、sessionsフォルダ内のメンテナンスが必要であるという記事を書きました(こちら)。Rails2.0ではデフォルトでCookieStoreという新しいセ…

Rails1.2.5 Railsの運用環境で気をつけること-ログファイルとセッションファイルの整理

Ruby on Railsをデフォルト環境のまま使うと、ログやセッションのファイルが無制限に増えていくので、どこかでそれらを整理する必要があります。正直なところ、この2点が自動化されないのはRails運用上の大きな弱点ではないかと思っています*1。 (追記 Nov 2…

Rails1.2.3 ActiveRecordで日付チェック(Validates Multiparameter Assignmentsプラグイン)

日付(date_select)や日時(datetime_select)などの複数入力フィールドで1つの値を取るデータ項目で、例えば日付を2月31日などと入力すると、ActiveRecord#Errorsにエラーを追加せずに ActiveRecord::MultiparameterAssignmentErrorsなる例外をraiseしてくれて…

Rails1.2.3 x_sendfileを使った高速Streaming

Railsのsend_file 認証されたユーザにのみファイルのダウンロードを許可したい場合、公開ディレクトリにファイルを配置するわけには行かないので、アプリケーション側から送信制御を行うことになります。しかし、大容量のファイルを送信する場合、ファイル全…

Rails1.2.3 選択されていないチェックボックス(checkbox)をパラメータとして送信する方法

チェックボックスが非選択の場合、Webブラウザは当該フィールドをparameterとして送信しません。以下はapiからの抜粋ですが、Ruby on Railsのcheck_boxヘルパでは check_box("post", "validated") <input type="checkbox" id="post_validate" name="post[va…

Rails1.2.3 ActiveRecordのfindで:includeを使っていると:selectが効かない

前置き:もしかしてOracle限定かも。時間ができたらMySQLでも試してみます。 以下のmodelがあるとします。 class User ActiveRecord::Base belongs_to :role end class Role ActiveRecord::Base has_many :users end 例えばroles.levelが3以上の人数を数えた…

Rails1.2.3 mongrelのprefix付き起動時に、グループ化されたコントローラに対応するURL指定方法

こちらの続きです。基本的にlink_toやurl_forは指定されたprefixに自動的に対応してくれるのですが、コントローラをグループ化しているときには注意が必要です。 以下の条件でのurl_forの出力を見てみます。 mongrel起動時のprefix: admin 現画面: userでグ…

Rails1.2.3 pagination_linksからlink_to_remote使ってAjax対応

小ネタですが、ちょっとだけはまったので。 検索ボタン押下時にid="result"の中の表を更新するとします。submit_to_remoteなどを使えば簡単に実現できますが、paginateを使っている場合、各ページへの遷移もAjax対応する必要があります。以下のような感じ。 …

Ruby on Rails1.2.3 Oracleへアクセスするための文字コード指定方法

データベースがMySQLの場合、database.ymlに encoding: utf8というようにエンコーディングを指定することができるのですが、Oracleだとこの設定がうまく効かないようです。mongrelなどのアプリケーションが動いているサーバで、環境変数NLS_LANGの設定を行う…

Ubuntu(Debian) nanoでcrontabの編集をしようとすると"bad minute"のエラーが出る

UbuntuやDebianでは、crontabのテキストエディタがデフォルトではnanoになっています。 crontab -e でcronの設定をしたとき、一行が長すぎるとファイル保存時に自動的に改行してしまうので "/tmp/crontab.DKEWNu/crontab":1: bad minute errors in crontab f…

Rails1.2.3 rescue_action_in_publicでエラーをうまく拾えない

ログファイル内のエラーログを監視するため、ページが見つからないエラー(404)のとき以外はログに"Application Error!"という文字列を出力したくて、AWDwRを参考にapplication.rbに def rescue_action_in_public(exception) case exception when ActionContr…

Rails1.2.3 + mongrelで一つのホストに複数のアプリを同居させるときに気をつけること

SSL証明書は結構高いので、あるアプリ内のユーザー入力フォームと別ポートで立てているバックエンドの管理システムを一つのホストに同居させたいケースがあると思います。たとえば本サイトは3001番、管理システムは3002番ポートで起動していて、 本サイト:…

Ruby on Rails1.2.3 + mongrel + Apache2.2.4 + mod_proxy + SSL でリダイレクトがうまくいかない

RailsでSSLを扱うとき、railsアプリ内でredirectしているところ(エラーページへの遷移など)ではなぜかhttpsでなくhttpのほうへ飛ばされてしまうという罠が良く知られていて、回避策としてapacheのhttpd.confなどで RequestHeader set X_FORWARDED_PROTO 'h…

Ruby on Rails 1.2.3 params[:id]で取得した値をsessionに入れて引き回すことができない?

時間がなくて、ちゃんと調べられていないのですが・・・ paramsで取得したパラメータをsessionメソッドを使って以下のような感じで引き回して使いたいと思いました。 class MyController これをViewから呼び出すと action1.rhtml: => 1 => params[:id]の値 …

Rubyで全角文字列(外字除く)であるかを判断する方法

かなりはまったのでメモ。 要件 全角文字以外を入力チェックで弾く JIS X 0208の1区から8区および16区から84区(すなわち外字を除くJIS第2水準漢字までの全角文字)を有効とする デフォルト文字コードはutf-8 で、以下の通り実現 require 'kconv' def zenkak…

Ubuntu7.04 RMagickのインストール

サムネイル作成のための画像処理ライブラリを物色。Ruby-GDとかRuby/PureImageとか色々あるようですが、RoRオフィシャルのhttp://wiki.rubyonrails.org/rails/pages/RailsOnUbuntuにRMagickのインストール方法も言及されていたので、これを使ってみることに…

Ubuntu7.04(Fiesty)上でApache2.2.3+mod_proxy+Mongrelの設定

ちょっとはまったのでメモ。Apacheは例によってSynapticで適当にインストール。Mongrelはすでにポート3000番で動いているものとします。 まずはmod_proxyをloadするために以下を実行。 $ sudo a2enmod proxy 続いて/etc/apache2/mods-enabled/proxy.confを以…

Ubuntu7.04(Fiesty)でRuby on Rails及びMongrelをセットアップする方法

SynapticからRuby on Railsを適当にインストールし、そのあとgemでmongrelをインストールしたのですが、なぜかmongrel_railsを実行しようとするcommand not foundになってしまいます。いろいろ検索してたらありました。 Since Rubygems has the potential to…

MySQL5.0.38 クライアントからリモートアクセスできない

引き続きUbuntuの開発環境整備中。SynapticからMySQLはさっくり入ったのですが、クライアントのWindowsPCからMySQL Administratorなどでアクセスしようとするとできません。telnetでポートの3306に問い合わせてみても返事が返ってこないので、MySQL側の設定…

ubuntu7.04にmongrelインストールでエラー

rubyやらrailsやらgemやらをSynapticでサックリインストールして、引き続きmongrelのインストールを試みる。Synapticの検索で出てこなかったのでコマンドラインから以下を実行。 sudo gem install mongrel mongrel 1.0.1 (ruby)、fastthread 1.0 (ruby)と選…