PassengerでSinatraを動かす方法
SinatraはRuby on Railsのように自動でフォルダやファイルを生成してくれないので、Railsデプロイの際のデファクトスタンダードとなりつつあるPassengerを使ってデプロイを行う際には、必要なフォルダやファイルを自分で作ってあげる必要があります。
デプロイする際に作成する必要があるフォルダやファイルをついつい忘れてしまうので、以下に書いておきます。
左の画像を見れば一目瞭然ですが、SinatraをPassenger上で動かすには、最低4つのファイル / フォルダが必要です。
publicフォルダとtmpフォルダは、説明の必要がないと思います。Railsのフォルダと同じです。これはただ単にデプロイするフォルダの中に作成しておくだけでOKです。画像やCSS、JavaScriptを使う場合は、publicフォルダの中に置いてあげるときちんと読み込んでくれます。
Railsの場合と異なるのは、「app.rb」と「config.ru」ですが、app.rbの方はSinatraで作成したアプリケーションファイルです。ファイル名も別に指定されているわけではないので、別の名前にしてしまっても大丈夫です。
「config.ru」の方は、Passengerが最初に読み込むファイルになります。このファイルの中身は下記のような感じ。
require 'app' # 今回は、Sinatraアプリケーションがapp.rbになっているのでappを指定
run Sinatra::Application
たった2行のファイルですが、これがないとPassengerはSinatraアプリケーションを動かしてくれません。
これでデプロイの準備は完了ですが、httpd.confの設定も忘れないようにしましょう!
httpd.confの設定も、基本的にRailsと同じです。
<virtualHost your.virtualhost.name>
ServerName your.virtualhost.name
DocumentRoot /path/to/sinatra/public # ここはRails同様、publicフォルダをします
</VirtualHost>
Sinatra, Passenger, mod_rails, Rails, Ruby | comments(0) | trackbacks(0) 2009.09.12 Sat 19:56
Rubygemsプラグインがホームディレクトリに入ってしまった時の対処方法(Mac)
意外とよくやってしまうので、自戒の意味を込めてメモ。
Mac上にインストールしたRubygemsプラグインを、gem uninstallで削除しようとすると下記のようなエラーが発生することがあります。
$ sudo gem uninstall xxxx
ERROR: While executing gem xxxx (Gem::InstallError)
上記のエラーは、Rubygemsプラグインのインストール時に「sudo」を付け忘れた時に起きる現象です。sudoを付けずにgem installを行うと、インストール先がホームディレクトリ以下の「~/.gem/ruby/1.8
」になってしまうのです。(sudoを付けた場合のインストール先は、通常「/opt/local/lib/ruby/gems/1.8
」です*1)
どうやらgem uninstallコマンドは、ホームディレクトリ以下にインストールされたRubygemsプラグインを標準では削除できないようです。
解決方法は、下記の通り。直接インストール先のフォルダを指定することで、ホームディレクトリ以下にインストールされてしまったプラグインを削除することが可能です。
$ gem uninstall -i ~/.gem/ruby/1.8/{プラグインのフォルダ名}
なぜsudoを付けないとホームディレクトリ以下にインストールされてしまうのかについては、「うっかりプログラミング日誌」さんのエントリー「Rubygemsがhomeディレクトリに入ってしまう」が詳しいです。
*1 標準のインストール先にファイルが存在しない場合は、gem envで表示される一覧中の「GEM PATHS」に表示されているPATHを見てください。インストール先ディレクトリが記載されています。
Mac, Ruby, Rubygems | comments(0) | trackbacks(0) 2009.04.17 Fri 17:20
RAMディスク上のSQLite3でAR.createを試す
@littlestarlingさんがtwitterで
「rake db:fixtures:load からかえってこない…2.5MB程度のcsvなのになんで?」
と呟いていたので。
RAMディスク上のSQLite3と、HDD上のSQLite3とでRailsのAR.createを試し、ベンチマークを取ってみました。(話の流れ上、トランザクションのあり/なしも同時に試した)
Ruby, Rails, SQLite3, パフォーマンス改善, トランザクション, RAMディスク | comments(0) | trackbacks(0) 2009.04.13 Mon 18:54
growl-loggerを使ってみた
Mac OSXは*NIXなのでrubyを使ってバッチ処理の類を動かしたりすることも多いのですが、ターミナルのウィンドウを見ないと処理が終わった事が分からない。折角優れたGUIを持っているMac OSXなのに、それじゃあ勿体ない。
というわけでGrowlにログを通知してくれるgemプラグイン「growl-logger」を使ってみたので、そのインストールメモです。
Mac, GUI, 管理ツール, MacPorts, Ruby, Growl | comments(0) | trackbacks(0) 2009.04.13 Mon 12:22
JavaScriptの正規表現でハマった
JavaScriptで、「.」や「..」に一致する文字列を抽出しようとしたのですが、ハマったのでメモ。
var dot = '..';
var str = 'ab';
// 「..」にはマッチして欲しい => alertが出ないとエラー
if( dot.match(new RegExp('^(\.){1,2}$')) ) alert('success 1');
if( dot.match(new RegExp('^(\\.){1,2}$')) ) alert('success 2');
if( dot.match(new RegExp(/^(\.){1,2}$/)) ) alert('success 3');
if( dot.match(/^(\.){1,2}$/) ) alert('success 4');
// 「ab」にはマッチして欲しくない => alertが出たらエラー
if( str.match(new RegExp('^(\.){1,2}$')) ) alert('error 1'); //=> ここでalertが出てしまう
if( str.match(new RegExp('^(\\.){1,2}$')) ) alert('error 2');
if( str.match(new RegExp(/^(\.){1,2}$/)) ) alert('error 3');
if( str.match(/^(\.){1,2}$/) ) alert('error 4');
Firebugのコンソール上で調べたところ、生成されるRegExpオブジェクトは下記の通りになっていた。
new RegExp('^(\.){1,2}$') //=> /^(.){1,2}$/ (.がエスケープされていない)
new RegExp('/^(\\.){1,2}$/') //=> /\/^(.){1,2}$\// (.がエスケープされていない)
new RegExp('^(\\.){1,2}$') //=> /^(\.){1,2}$/ (これは正しい挙動)
new RegExp(/^(\.){1,2}$/) //=> /^(\.){1,2}$/ (これは正しい挙動)
new RegExpする際に正規表現を文字列形式で渡すと、シングルクオート/ダブルクオートに関係なく評価された文字列を正規表現として扱う仕組みだったわけだ。
つまり、ハマった原因は自分がRuby脳になってたせい。なんてこったい!
ちなみに、正規表現作成時におけるシングルクオート/ダブルクオートの解釈は、言語別に見ると下記のような感じでした。
Ruby, JavaScript, ActionScript, PHP, Python, 正規表現 | comments(1) | trackbacks(1) 2009.04.07 Tue 22:38
Rails勉強会@東京第38回 行ってきました
2009年2月15日、Rails勉強会@東京に行ってきました。
今回の会場は浜松町近くのTISさん。トイレからの見晴らしも良く、全室机付き。素晴らしい会場を提供していただき、ありがとうございます!
今回行われたセッションは下記の5つ。
前半 13:40-15:10
- SKIPの話
- RSpecとCucumber
- Ruby 1.9.1でRailsとかMerbとか動かす(前編)
後半 15: 40-17:10
- Rails 2.3.0の話
- Ruby 1.9.1でRailsとかMerbとか動かす(後編)
さて、僕が参加したセッションの感想など書いておきます。
Ruby, Rails, 勉強会 | comments(1) | trackbacks(0) 2009.03.07 Sat 20:46
ペットポータルサイト「アニカクラブ」を制作しました
AHBインターナショナル株式会社さんが運営するペットポータルサイト「anicaclub(アニカクラブ)」が、2月20日から一般公開されました。特集記事も初回から8本掲載されており、充実した内容となっています。
今回は、このanicaclubの開発メンバーとして、サーバー側のプログラミング(Rails)からHTML、CSS、JavaScriptまでを担当させていただいたほか、店舗検索・求人向けモバイルサイトの制作全般(デザイン除く)を担当させていただきました。
全国区・小動物全般を対象とするペットポータルサイトは、恐らく国内初だと思います。特集記事の他にも全国のペットショップや動物病院、ペットホテルなどを検索したり、ペットに関するFAQのコーナーなども揃っています。
ポータルサイトは、アクセスしてくれる皆さんの声を反映していく事で「もっと便利で使いやすいサイト」になっていくと思います。動物好きの方、既にペットを飼っている方、是非一緒にanicaclubを「便利で、使いやすいサイト」にしていってあげてください!
- anicaclub(http://www.anicaclub.com/)
- AHBインターナショナル株式会社(http://www.ahb.co.jp/)
Ruby, Rails, 制作実績, anicaclub, アニカクラブ, ペットポータル | comments(0) | trackbacks(0) 2009.03.02 Mon 19:50
Rails勉強会@東京第37回 行ってきました
1年半ぶりくらいに、Rails勉強会@東京に行ってきました。
参加者45名という、IT系勉強会にしては参加可能者数が多い勉強会にもかかわらず、毎回きちんと枠が埋まるのはさすがだな、と思いながら参加。
前回参加したときは、確かYuguiさんの「Railsのソースを追っかける」みたいなセッションに参加したのですが、当時のレベルではYuguiさんやもろはしさんのレベルについて行けず断念。
今回も若干不安ではあったのですが、勇気を振り絞って行ってきました。
さて、僕が参加したセッションの感想など書いておきます。
Ruby, Rails, 勉強会, railstokyo, i18n | comments(0) | trackbacks(0) 2009.01.22 Thu 14:35
SQLite3が突然create/updateエラーを吐き出したら...
このブログは、DBにSQLite3を使っているのですが、ある日突然DBへの書き込み時に以下のようなエラーが出るようになりました。
A ActiveRecord::StatementInvalid occurred in ...(中略)...:
SQLite3::SQLException: attempt to write a readonly database: ...(中略)...
/usr/local/lib/ruby/gems/1.8/gems/activerecord-2.1.0/lib/active_record/connection_adapters/abstract_adapter.rb:147:in `log'
つい5分前までは、書き込みができていたのに、突然のエラー。
試しに、script/consoleでARオブジェクトを操作しようとしても、script/dbconsoleでSQLite3用のコンソールからカラムの操作をしようとしても、反応なし。
同じ問題で悩んでいる人がいるかもしれないので、原因と対策方法を書いておきます。
Ruby, Rails, SQLite3, SQLException | comments(0) | trackbacks(0) 2008.11.28 Fri 19:42
Railsでモデル名に複数形を使ってはいけない
モデル名に複数形を使うと「nil.to_sym」というNoMethodErrorが表示される
Rails(2.1.1現在)でscript/generateする時、モデル名に複数形を使ってしまうと、
config/routes.rb で map.resources を使ったRESTfulアプリケーションを作る際にエラーになります。
例えば、
ruby script/generate scaffold abouts title:string content:text
と、複数形の名称を使用してscaffoldした後に、scaffoldで生成されたコントローラーで新規作成や修正を行おうとすると
NoMethodError: You have a nil object when you didn't expect it!
The error occurred while evaluating nil.to_sym
といったエラーが表示されてしまいます。
script/generateの際に複数形ではなく単数形を使うことで、これを回避することができます。
ruby script/generate scaffold about title:string content:text
これに気付かず、数時間悩みました……。
(逆にRESTfulな場合のコントローラー名は、単数形を使ってしまうと問題が出るようです)
じゃあ、例えば「news」のように単数形も複数形も「〜s」で終わるようなイレギュラーな単語はどうするのかという事で、調べてみました。
Ruby, Rails, scaffold | comments(0) | trackbacks(0) 2008.10.16 Thu 05:32
アットゲームズの対戦ゲーム「7ならべ」を制作しました
「アットゲームズ」(株式会社ジークレスト) さんで、10月14日からマルチプレイ Flash 対戦ゲーム「7ならべ」が公開されました。
既に公開されている、「ババヌキ」「大富豪」に続く、三並さんが作った通信フレームワークdangoを使用したゲーム3作品目になるのですが、今回は僕がサーバー側のコードを書かせてもらいました。
誰でも無料で楽しむ事ができ、登録不要の「お試しプレイ」もあるので、是非一度プレイしてみてください!
なお、アットゲームズさんでは、7ならべ実装を記念して記念イベント開催中だそうです。
無料の会員登録を行って、アイテムを手に入れたり、7ならべマスターとして名を馳せるのも一興かと(笑)
7ならべ, dango, フレームワーク, Ruby, Rails, アットゲームズ, 制作実績 | comments(0) | trackbacks(0) 2008.10.15 Wed 18:46
ABOUT ME
tak (Takahito Sezutsu)
コメント、トラックバックはお気軽に!
COMMENTS
-
Versions - Macで使えるGUIベースのSubversionクライアント
→TANIARollins23 (07.23) -
Rails勉強会@東京第38回 行ってきました
→TamikaTurner (07.04) -
MacのSkypeでログイン時プルダウンメニューに表示されるSkype名を消す方法
→tak (06.22) -
「オリジナルの項目が見つからなかったので、エイリアス“********”は開けません。」と出て、Finderで外付けHDDが開けない時は
→tak (06.22) -
「オリジナルの項目が見つからなかったので、エイリアス“********”は開けません。」と出て、Finderで外付けHDDが開けない時は
→ko (06.22) -
MacのSkypeでログイン時プルダウンメニューに表示されるSkype名を消す方法
→Mac (05.06) -
クックパッドの裏側を見てきました
→Taylor30CLEVELAND (03.23) -
MacのSkypeでログイン時プルダウンメニューに表示されるSkype名を消す方法
→tak (03.11) -
MacのSkypeでログイン時プルダウンメニューに表示されるSkype名を消す方法
→tama (03.11) -
Mac版ATOK定額制(体験版)を1週間使ってみた
→tak (09.19)