本番環境でテーブルがないと怒られた
Railsには、テスト用・開発用・本番用の3つ環境が用意されています。
詳しくはレシピ177に載っています。
- 作者: 高橋征義,諸橋恭介
- 出版社/メーカー: ソフトバンククリエイティブ
- 発売日: 2008/05/31
- メディア: 単行本
- 購入: 37人 クリック: 567回
- この商品を含むブログ (95件) を見る
各環境の切り替え
実行モード | 説明 |
---|---|
RAILS_ENV=production | 本番用 |
RAILS_ENV=development | 開発用 |
RAILS_ENV=test | テスト用 |
各環境を呼び出すには、表のようなオプションを付けることでできます。
例えば、本番環境でサーバを動かすには
env RAILS_ENV="production" mongrel_rails start
のようにします。
テーブルがないエラー
上のように本番環境で起動させて、アプリを見たところ
以下のようなエラーが表示されました。
We're sorry, but something went wrong.
We've been notified about this issue and we'll take a look at it shortly.
エラーの通り"/log/production.log"を見てみると、以下のような内容が
ActiveRecord::StatementInvalid (Could not find table 'tablenames'):
...
...
どうもtablenamesテーブルが見つからないとのこと。
本番用にもマイグレーションする必要があるようです。
そこで以下のようにオプションを付けて実行。
rake RAILS_ENV=production db:migrate
無事表示されるようになりました。
この方法が正しいのかわかりませんが。
イマイチ開発から本番へのやり方が理解できていない。
2学期の通信簿
年末ということで、ひさしぶりにブログ通信簿を見てみました。
http://blogreport.labs.goo.ne.jp/tushinbo.rb
前回(d:id:ky2009:20080827:1219857231)と比べてどうでしょうか。
だいぶ近づいてきた?
3桁区切りの数字からカンマ(,)を取り除く
数字の表示で、よく3桁ごと(123,456,789)に区切って表示します。
Web上のテキストでも、こういう表現があるので
これを処理をする際に、カンマを取り除きたいと思ったのですが
標準のメソッドにはなさそうだったので考えてみました。
"123,456,789".gsub(/(\d{0,3}),(\d{3})/, '\1\2') #=>"123456789"
何か荒がありそうですが、どうなんでしょうか。
ちなみに、平の数字から3桁ごとに区切る方法はこちらで紹介されていました。
数字に「12,345,678」と3桁区切りでカンマを入れたいときの話
http://app.blog.livedoor.jp/takaaki_bb/tb.cgi/51133994
Hpricotでタグ名を書き換える
Hpricotとは、rubyのhtmlパーサです。
これを使って、タグ名を書き換える時にわかったことをメモします。
タグ名を書き換える
例えば、html内のすべてthタグをtdタグに書き換えます。
require 'rubygems' require 'hpricot' require 'open-uri' doc = Hpricot(open'http://example.co.jp/') (doc/:th).each do |tag| #puts tag.name #=>'th' tag.name = 'td' end puts doc
「.name」でタグ自体の名前を得ることができます。
チュートリアルには、idやclassの検索方法は書いてあったのですが
これが分からず手こずってしまいました。
追記(12/16):.nameでタグを書き換えられると書きましたが、これだと開くタグはできますが閉じるタグが書き換えられないことに気付きました。
そこで、オフィシャルのチュートリアル(http://code.whytheluckystiff.net/hpricot/wiki/HpricotAltering)にあった
swapメソッドを使って強引に書き換えてみることにしました。
require 'rubygems' require 'hpricot' require 'open-uri' doc = Hpricot(open'http://example.co.jp/') (doc/:th).each do |tag| tag.swap("<td>" + td.inner_text + "</td>") end puts doc
要素の中身のテキストだけを得る
あとチュートリアルで役立ったこともメモしておきます。
例えば下のようなhtmlを検索する場合
<th><b>ホゲ</b></th>
inner_htmlだと
(doc/:th).inner_html #=> "<b>ホゲ</b>"
となりますが、inner_textを使うと
(doc/:th).inner_text #=> "ホゲ"
と中身のテキストだけを得ることができます。
よって
<th><b>ホゲ</b>または<b>hoge</b></th>
だと
(doc/:th).inner_text #=> "ホゲまたはhoge"
となります。
Hpricotについて
オフィシャルページ
Hpricot A Fast, Enjoyable HTML Parser for Ruby
http://code.whytheluckystiff.net/hpricot/
日本語のチュートリアル
Hpricot/Showcase
http://mono.kmc.gr.jp/~yhara/rubyscraping/?Hpricot%2FShowcaseHTMLパーサ Hpricot
http://tam.qmix.org/wiki/Hpricot.html
Railsでのタイムゾーンの指定について
Webアプリで扱いの難しい時刻表示についてです。
以前は結構めんどうくさかった気がするのですが
Rails2.1からconfig/environment.rbで簡単に指定ができるようになったそうです。
よりシンプルに日付と時刻の表示書式を整えるには...CommentsAdd Star
http://d.hatena.ne.jp/zariganitosh/20080809/1218241507Rails2.1 new feature
http://blogs.sun.com/cinnabar/entry/rails2_1_new_feature
標準では
config.time_zone = 'UTC'
のようになっています。
ここを
config.time_zone = 'Tokyo'
のように変えることで、ローカルタイムゾーンで表示してくれます。
ちなみにローカルタイムゾーンを調べるには、以下のコマンドを使います。
rake time:zones:local
* UTC +09:00 * Osaka Sapporo Seoul Tokyo Yakutsk
firefoxのアドオンの設定が起動ごとにリセットされてしまう
acts_as_taggable_on_steroidsの導入
- 作者: 高橋征義,諸橋恭介
- 出版社/メーカー: ソフトバンククリエイティブ
- 発売日: 2008/05/31
- メディア: 単行本
- 購入: 37人 クリック: 567回
- この商品を含むブログ (95件) を見る
acts_as_taggable_on_steroidsとは、Railsでタグ機能を実現するプラグインです。
Railsレシピ本では、レシピ154にあります。
こちらはacts_as_taggable_on_steroidsのreadmeファイルです。
http://svn.viney.net.nz/things/rails/plugins/acts_as_taggable_on_steroids/README
ここの通りすれば、使えるようになりました。
日本語だとここを参考にしました。
acts_as_taggable_on_steroidsの使い方まとめ
http://brass.to/blog/acts_as_taggable_on_steroids.html
フォームでの使い方
どうやらacts_as_taggableはtag_listメソッドが肝のようです。
これを使うことでtagテーブルへのタグの追加・取得が簡単に行えます。
new.html.erb
<p> <%= f.label :tag_list %><br /> <%= f.text_field :tag_list %> </p>
新規入力フォームの例です。
デフォルトでは、区切り文字はカンマ(,)です。
あとは普通に他の要素といっしょにコントローラで.saveすれば
tagテーブルにタグが1つずつ格納されました。
show.html.erb
<p> <b>Tag list:</b> <%=h @shelf.tag_list %> </p>
表示ビューも似た感じです。
本当に簡単にタグが扱えました。
これを使うとタグクラウドなんかも実現できるようです。
使ったらまた紹介してみたいと思います。