[Rails] タイムゾーン(Time Zone) を日本標準時(JST)に設定する方法
- 2011 11/23
Railsにて、タイムゾーンを 世界協定時(UTC)から日本標準時(JST)に設定する方法を調べたのでメモ。
■ config/environments/production.rb
# time zone config.time_zone = 'Tokyo' |
Railsにて、タイムゾーンを 世界協定時(UTC)から日本標準時(JST)に設定する方法を調べたのでメモ。
■ config/environments/production.rb
# time zone config.time_zone = 'Tokyo' |
先日Twitterで「Rails使いはこの記事ぐらいは読んでおいた方が良いんじゃないかな」というツイートを見掛けたので、該当の記事「Ruby on Rails作者 David Heinemeier Hansson へのインタビュー記事 – 小飼弾のアルファギークに逢いたい」を読みました。
■ 小飼弾のアルファギークに逢いたい♥:#2
・Ruby on Rails作者 David Heinemeier Hansson(前編) RubyでRailsを書いたわけ|gihyo.jp … 技術評論社
・Ruby on Rails作者 David Heinemeier Hansson(中編) 37signalsってどんな会社?|gihyo.jp … 技術評論社
・Ruby on Rails作者 David Heinemeier Hansson(後編) 「アーキテクト」って言葉を使ったら負け|gihyo.jp … 技術評論社
書籍「小さなチーム、大きな仕事」を一年ぐらい前に読んでるのですが、働き始めてから読むとまた違った見方ができそうなので、近々、読み返そうと思います。
Rails3.0にて、scaffoldで出力される削除リンク(Destroy)が動作しないときは、jquery_ujs.js or rails.js が読み込まれているか確認します。
※ 削除リンク(Destroy)は上記の部分です
prototype.jsを使用しなくて、jQueryを使う場合、削除リンクはこのままでは動作しません。
動作させるためには、jquery_ujs.js(rails.js)を読み込む必要があります。
<%= link_to 'Destroy', test_model, :confirm => 'Are you sure?', :method => :delete %> |
僕の場合、jquery_ujs.js の役割を確認せずに削除していたのが原因でした。
ちなみに、jquery_ujs.js は Rails3.0 で jQuery を使う設定をするときに一緒に作成されます。
まず、Gemfileに以下のような記述を追加して、bundleします。
gem 'jquery-rails''ジェネレータを実行して、不要なファイルの削除と必要なファイルの生成を行います。
$ rails g jquery:installこのジェネレータによって、prototype.js関連の以下のファイルが削除され、
public/javascripts/prototype.js
public/javascripts/effects.js
public/javascripts/dragdrop.js
public/javascripts/controls.jsjQuery関連の以下のファイルが生成されます(jquery-rails 1.0.2の場合はjQuery 1.6がインストールされます)。
public/javascripts/jquery.js
public/javascripts/jquery.min.js
public/javascripts/jquery_ujs.js(各種ヘルパーで生成した要素にイベントハンドラを設定したりするもの。かつてのrails.js)・引用元:Rails 3.1ではjQueryが標準になるそうなので、すぐに要らない知識になるかもしれませんが、Rails 3.0でのjquery-ra… – Sooey
引用元記事のタイトルにあるように、Rails 3.1ではjQueryが標準になるので、ハマる人はあまりいないと思いますが参考になれば幸いです。
【参考】
Rails3.1で作成した scafold ファイルの index.html.erb の table を見やすくするために scaffold.css を編集してみました。
表に線があるだけでかなり見やすくなりますね。
■ public/stylesheets/scaffold.css
.scaffold_table { border-collapse: collapse; border: 1px #DCDCDC solid; } .scaffold_table th { border: 1px #DCDCDC solid; padding: 5px; } .scaffold_table td { border: 1px #DCDCDC solid; padding: 5px; } |
CSSファイルを編集したら、scafold機能で作成したテンプレートファイルの table タグに class=’scaffold_table’ を追加して、スタイルを反映させます。
■ app/views/books/index.html.erb
<h1>Listing books</h1> <table class='scaffold_table'> <tr> <th>id</th> <th>Title</th> |
以上です。
【参考】
Ruby on Railsにて、rails generate コマンドでコントローラを作成するときの命名規則を調べたのでメモ。
コントローラの名前は「CamelCased(キャメルケース)」か「under_scored(アンダースコアード)」のどちらかの方式で指定できます。
■ CamelCased(キャメルケース) の例
$ rails generate controller FacebookUsers |
■ under_scored(アンダースコアード) の例
$ rails generate controller facebook_users |
結論としては、いずれの方式も作成されるファイル名は「under_scored」の形式となり、作成されるクラス名は「CamelCased」の形式となるみたいです。
【参考】
Ruby on Rails 3.1.0 にて、アプリケーションを作成してdevelop環境は作らずに、Heroku上のstaging環境でいきなり動かしたら以下のようなエラーが発生しました。
ActionView::Template::Errror (application.css isn't precompiled) |
対応策としては、config.assets.compile を true にすればOKです。
■ config/environments/staging.rb
# Don't fallback to assets pipeline if a precompiled asset is missed # config.assets.compile = false config.assets.compile = true |
以下、stackoverflowに書かれていた説明と自分で翻訳したもの。
By default Rails assumes that you have your files precompiled in the production environment, if you want use live compiling (compile your assets during runtime) in production you must set the config.assets.compile to true. You can use this option to fallback to Sprockets when you are using precompiled assets but there are any missing precompiled files. If config.assets.compile option is set to false and there are missing precompiled files you will get an “AssetNoPrecompiledError” indicating the name of the missing file.
デフォルトの設定によって、RailsはProduction環境でプリコンパイル済みのファイルがあることを想定しているので、もしProduction環境でライブコンパイル(runtime中にアセットをコンパイルすること)を使いたいなら、config.assets.compile を true にしなければならない。プリコンパイル済みファイルが全くないが、プリコンパイル済みのアセットを使おうとしているとき、Sprockets *1 の代替策としてこのオプションを使うことができる。config.assets.compile のオプションが false に設定されていて、プリコンパイル済みのファイルがない場合、存在しないファイル名を指して“AssetNoPrecompiledError”が発生するでしょう。
*1 Sprockets: Rubyで書かれたJavaScriptプリプロセッサで、複数のJavaScriptソースファイルを1つにまとめるのが主な機能
【参考】
・rails 3.1.0 ActionView::Template::Errror (application.css isn’t precompiled) – Stack Overflow
・Asset Pipelineを備えたRails 3.1のリリースに向けて、その根幹を担うSprocketsをちょっと触っておくことにした。 – Sooey
Ruby on Railsの 2系と3系のRoutingの違いを調べたのでメモ。
# Rails 2: map.connect 'hello_world', :controller => 'posts', :action => 'index' # Rails 3: match 'hello_world' => 'posts#index' |
# Rails 2: map.resources :users # Rails 3: resources :users |
# Rails 2 map.resources :games, :member => { :download => :get }, :collection => { :favourites => :get } # Rails 3 resources :games do get :download, :on => :member get :favourites, :on => :collection end |
# Rails 3 resources :games do member do get :download end collection do get :favourites end end |
# Rails 2 map.root :controller => 'posts', :action => 'index' # Rails 3 root :to => 'posts#index' |
# Rails 2 map.namespace :admin do |admin| admin.root :controller => 'posts' end # Rails 3 namespace :admin do root :to => "admin/posts#index" end |
# Rails 2 map.connect 'posts/:year/:month', :controller => 'posts', :month => nil, :requirements => { :year => /\d{4}/ } # Rails 3 match 'posts/:year(/:month)' => 'posts#index', :constraints => { :year => /\d{4}/ } |
【参考】
・Rails 3: Routing Examples – Mark Connell
Ruby on Rails のTips を動画やコードで分かりやすく解説されている「RailsCasts」がおすすめなのでご紹介します。
・公式:Ruby on Rails Screencasts – RailsCasts
・参考:Ruby on Railsを覚えつつ英語の勉強「RailsCasts」 – MOONGIFT|オープンソース・ソフトウェア紹介を軸としたITエンジニア、Webデザイナー向けブログ
手順が動画で丁寧に説明されているので、かなり役立ってます。ついでに英語の勉強もできちゃうのも良いですよね。
Herokuで強制的にdb:migrateをやり直す方法を調べたのでメモ。
まず、HerokuではRails標準のrake db:resetは使えません。
代わりに、pg:resetコマンドで Herokuの標準のpostgresのDBをリセットすることができます。
$ heroku pg:reset --db SHARED_DATABASE_URL |
コマンド実行後、確認のためプロンプトが表示されるので、アプリ名を入力するとリセットが実行されます。
ちなみに、SHARED_DATABASE_URLは以下のコマンドで確認できます。
$ heroku console Ruby console for codenote.heroku.com >> ENV['DATABASE_URL'] => "postgres://username:[email protected]/dbname" |
・参考:Heroku | Dev Center | PostgreSQL
他にも、db:migrateをやり直す方法があり、VERSION=0 を指定することで最初にdb:migrateする前の初期状態に戻すことができます。
(最初にdb:migrateしたときのマイグレーションファイルが存在することが前提)
$ heroku rake db:migrate VERSION=0 |
また、db:migrate:redo で何回か前の状態(STEP=回数)に戻すこともできます。
$ heroku rake db:migrate:redo STEP=10 |
以上です。
【参考】
・[Rails][Heroku] Herokuで強制的にdb:migrateをやり直す。その2 – mat_akiの日記