2012年11月6日火曜日

9日目:jRubyでscaffoldを試してみる。

RubyといえばRails、RailsといえばScaffoldでしょ!と勝手に言って、Scaffoldを試してみます。
Scaffoldとは、データベースのテーブルを操作(カラム作ったり、消したり)するアプリをコマンドで作成できる仕組みです。
手順
①プロジェクトを作って、Railsをセットアップします。
②Scaffoldコマンドでアプリを作ります。
③rakeコマンドでDBをセットアップします。
④warblerでアプリをWarファイル化します。
⑤Tomcatに乗せて動かします。
⑥動かないので、ちょちょっといじって動くようにします。


①プロジェクトを作って、Railsをセットアップします。
プロジェクト名はScaffoldInspectとしました。

・ターミナルやコマンドラインツールで、Eclipseのワークスペースに行きます。デフォルトではユーザのホームディレクトリのworkspaceという名前のディレクトリです。そこで、Railsコマンドを打ちます。
 rails new {プロジェクト名} 
これで、作ったプロジェクトにRailsがセットアップされます。

②Scaffoldコマンドでアプリを作ります。
 cd {プロジェクト名} 
 rails generate scaffold user name:string tel:integer introduction:string 
rails generate scaffoldがScaffoldでアプリを作るコマンド。それ以降はデータの型定義です。

③rakeコマンドでDBをセットアップします。
 rake RAILS_ENV=production db:migrate 
これでDBにテーブルが作られます。
プロジェクト中のdb/production.sqlite3の中を覗くと、usersというそれっぽいテーブルが作られているのがわかります。

④warblerでアプリをWarファイル化
 warble config 
 warble war 
これで{プロジェクト名}.warというwarファイルが作成されます。

⑤Tomcatに乗せて動かします。
作ったwarファイルを{Tomcatのインストールフォルダ}/webappにコピーします。

⑥動かないので、ちょちょっといじって動くようにします。
これで動くぜ!と思って、http://localhost:8080/sm/users にアクセスすると
2つの理由で動きません。

We're sorry, but something went wrong.

なんて言って怒られる。この理由は
・dbファイルがコピーされない。
・scssがコンパイルされてない。
さて、解決します。
そのまま動かそうとすると、まずはlocalhost.logに以下のようなエラーが出ます。
ActiveRecord::JDBCError (The driver encountered an unknown error: path to '/Applications/apache-tomcat-7.0.32/webapps/{プロジェクト名}/WEB-INF/db/production.sqlite3': '/Applications/apache-tomcat-7.0.32/webapps/{プロジェクト名}/WEB-INF/db' does not exist):
ふむ。確かにdbファイルが無い。
しょうがないので、作ります。
mkdir /Applications/apache-tomcat-7.0.32/webapps/{プロジェクト名}/WEB-INF/db
cp db/production.sqlite3 /Applications/apache-tomcat-7.0.32/webapps/{プロジェクト名}/WEB-INF/db/
この場所だと再デプロイすると消えちゃうので、運用したい場合は別の場所にDBおいたほうがいいですね。
さてTomcatを再起動後、再度アクセスするとエラーが変わります。
ActionView::Template::Error (application.css isn't precompiled):
scssがコンパイルされていないんでしょう。
予めコンパイルしておく、という方法がいいんでしょうが、ここでは動的にコンパイルしてくれるように設定します。
 /Applications/apache-tomcat-7.0.32/webapps/{プロジェクト名}/WEB-INF/config/application.rbのL57行目あたり
    # config.assets.enabled = true ↓↓↓
    config.assets.enabled = false
にします。
最後の設定はホントはデプロイする前にやっておいたほうがいですね。
この対応は嘘でした。これだとJavaScriptが読み込めなくてDestroyとかが動かない。ホントの対応はこちら。
で、Tomcatを再起動。再度、http://localhost:8080/sm/users にアクセスすると



こんな画面が出たら成功! New Userでデータを作ったり弄ったりできます。

簡単だなぁ。次回以降、Railsで何をやっているかもうちょっと深掘りしていきたいと考えています。

0 件のコメント:

コメントを投稿