どくたーぺっぱーちぇりお

08<< 123456789101112131415161718192021222324252627282930 >>10

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

Ruby on Railsをアップデートするには

以前、gem installしていたrailsだが、新しいバージョンが2日ほど前にリリースされていたようだ。
ソースはこの通り。
Rails 3.1.1 has been released!
http://weblog.rubyonrails.org/2011/10/7/ann-rails-3-1-1

新しいバージョンがリリースされるのは嬉しいが、今までアップデートしたことが無かったぜ。
アップデートの方法は、なんとなく予測はつくが・・・

~$ rails -v
Rails 3.1.0
~$ sudo gem install rails
>[sudo] password for user:
(中略)
Fetching: rails-3.1.1.gem (100%)
(中略)
Successfully installed rails-3.1.1
(中略)
Installing RDoc documentation for rails-3.1.1...

そういえば、ドキュメントとか、まだ読んだことが無いや。未熟者ですね。
しかし、特に労せずともアップデートされました。
他にも、activerecord-3.1.1, actionpack-3.1.1なども一緒に入ったよ。

~$ rails -v
Rails 3.1.1

ねんのためにバージョンを確認して、完了。
スポンサーサイト

Ubuntu11.04にAptana Studio 3.0.4をインストールして、楽にRuby on Railsしよう

Ruby on Rails 3 アプリケーションプログラミング を読んで半分くらいまで来たところで、
とりあえず一気に最後まで読んでしまった。

4.ビュー開発
4.1ビューヘルパー
InputBox、検索、TextArea、ListBox、グループ化、配列、日時等
4.2画面上の文字列、数値、日付の加工
4.3ハイパーリンク
4.4画像、音声、動画、JavaScript、スタイルシート、フィード、Favicon、外部リソース
その他、自作、レイアウト定義、部分共有テンプレート

5.モデル開発
検索メソッド(Find,Query,Exists,scope,count,average,sql)
5.4レコードの追加、更新、削除
5.4.6トランザクション
5.4.7オプティミスティック同時実行制御
5.5検証機能(文字や数字入力データの正当性チェック)
Acceptance,Conifrm,Unique(一意)
5.6Assosiation(リレーションシップ)
5.7コールバック
追加、更新、削除の処理の後に追加処理を行う
処理の定義
5.8マイグレーション

6コントローラ開発
7ルーティング
8テスト
9高度な機能(Ajaxなど)

だいたいこんな感じだった。もう基本的なことは全て理解したため、
今後は使いたい機能を選び、かいつまんで学習しながら、どんどん使っていけば良さそうだ。

そこで、IDEがあればな、と思った。
そもそもエディタとして、vimとLeafpadくらいしか(場合によって、勝手にgeditが起動するが)
使っていなかったので。
どうせなら、もうちょっとコーディング速度向上に貢献しそうな何かが欲しい。
そこでちょっとgoogle先生に問い合わせてみたが、カッチリしたIDEは、Aptana Studio以外には特に無いようだ。

Aptana Studio 3.0.4 今回は、これをインストールして使ってみようと思う。

一説によれば、Javaが必要らしい。今回最初から入ってたため、インストール方法は割愛。
˜$ java -version
> java version "1.6.0_22"
> OpenJDK Runtime Environment (IcedTea6 1.10.2) (6b22-1.10.2-0ubuntu1~11.04.1)
> OpenJDK 64-Bit Server VM (build 20.0-b11, mixed mode)

ダウンロード
cd Downloads/
wget -c http://d1iwq2e2xrohf.cloudfront.net/tools/studio/standalone/3.0.4.201108101506/linux/Aptana_Studio_3_Setup_Linux_x86_64_3.0.4.zip
ダウンロード完了

解凍
unzip Aptana_Studio_3_Setup_Linux_x86_64_3.0.4.zip

起動してみる
cd Aptana_Studio¥ 3
˜/Downloads/Aptana Studio 3$ ./AptanaStudio3

もう普通に起動した。どうやらそのまま使えるバイナリ配布タイプのプログラムらしい。
日本語化については、ここにhttp://www.rubylife.jp/aptana/japan/なんか書いてあった。
書いてある通りにやろうと思ったら残念なことにWindowsだったが、方法としては同じであり、中身見たらわかるレベルだった。
wget http://keihanna.dl.sourceforge.jp/mergedoc/52508/pleiades_1.3.3.zip
mv ./pleiades_1.3.3.zip ./Aptana¥ Studio¥ 3/pleiades_1.3.3.zip
cd Aptana¥ Studio¥ 3
インストール完了(必要ならばここでインストールしたい場所にcp -R してもいいだろう)
日本語化
unzip pleiades_1.3.3.zip
vi AptanaStudio3.ini
-javaagent:plugins/jp.sourceforge.mergedoc.pleiades/pleiades.jar
(一行追記した)
更に、そのまま起動しようとすると、エラーが出て止まったりするため、起動のためのランチャーを作っておこう
vi aptanastudio3.sh
#!/bin/sh

cd "/home/USERNAME/Downloads/Aptana Studio 3/"
./AptanaStudio3
exit 0
(2行目空欄、計5行)
chmod +x aptanastudio3.sh
完了。
Gnomeのカスタムアプリケーションのランチャなどで、このaptanastudio3.shを起動するようにすれば、問題ないようだ。
それにしても、真っ黒いコンソールみたいな感じの画面カラーが見にくいですなぁ。変更しないと・・・
>ウィンドウ>設定>Aptana Studio>テーマで出来そうですが。
インストールよりも、こちらの色の設定変更のほうが手間がかかる。

Ruby on RailsはSQLiteに、いったいいくつまでの数字を入れることが出来るのか?

なぜかぐぐってもわからなかったんだが。
みんなRailsのこと信用しているから、疑念すら抱かないのか知らんが。
信者かよ。( `д´) ケッ!

などと思ったのが疑問の始まりですが。
一説によると、既に答えは出ているようです・・・?

答え:いっぱい
いやそれはわかってはいるんだけれども。
3より大きな数字は、いっぱいで表現してもいいですよね。
ただしデータベースは別です。目を三角にしてキッチリカッチリクッキリ。( `д´) ケッ!

Ruby on RailsはSQLiteに、いったいいくつまでの数字を入れることが出来るのか?

大事なことなので、2回言いました。
なぜ大事なのか?
それはたとえば、データベースに格納するデータがたくさんある状況を考えてください。
データベースは一般的に、主キーとして、整理するための連番が自動的に付与されます。
この連番の上限はいくつなのか?それはつまり、いくつまでデータが格納出来る理屈になるのか?に他ならない。

SQLiteのメモ知識
参考にさせて頂いた:http://www.dbonline.jp/sqlite/type/index1.html
ここによれば、sqliteにデータが格納されるとき、5種類のタイプのデータにしかならない。
しかもそのうちの1つはNULLである。
その上取り扱いが柔軟で、カラムに対してデータ型を決めてもよいが、データ1つに1つのデータ型が格納される仕組み(!?)もあるような。

SQLiteのデータ型
INTEGER 符号付整数。1, 2, 3, 4, 6, or 8 バイトで格納
REAL 浮動小数。8バイト
TEXT テキスト
BLOB BinaryLargeObject=ファイルなどをバイナリのままの扱いで格納出来る

SQLiteは柔軟すぎて、俺のSQL脳(大脳の一部のSQLとの通信を司る部分)がおかしくなりそうだ。

一方でRuby on Railsは、ちょっとぐぐったらこんな感じだったが
参考にさせて頂いた:http://shin.moe-nifty.com/server/2006/10/ruby_on_rails__b15d.html
数値: primary_key,integer,float
文字列: string (255文字),text (文字数制限なし)
日付と時刻: date,time,datetime(またはtimestamp)
Yes/No: boolean
バイナリ: binary
となっているが、とくに数値の文字数制限に関してはどこを探しても見当たらない。

これでは、新しいHDDを買ったら容量大きすぎてBIOSが対応していなかった、みたいな感じに
データベースをアップグレードしたら、取り扱い可能な数値が大きすぎて、Railsが対応出来ないような事にならんのか、などと妄想したが。
対応データベースが決まっているから、いいのかな。

で、Raisのstringは、SQLiteのINTEGERなのだろう。
1, 2, 3, 4, 6, or 8 バイトというのが、上限だ。
データに数値を入れる時点で

-127〜127 =1byte
-32767〜32767 =2bytes
-8388607〜8388607 =3bytes
-2147483647〜2147483647 =4bytes
-549755813887〜549755813887 =5bytes
-140737488355327〜140737488355327 =6bytes
-9223372036854775807〜9223372036854775807 =8bytes

なんかしらんが、天文学的な数値になってた。
8バイトって、そもそも64ビットのことでしょう。64bit時代オソロシス。
桁数が多いためLibreOffice Calcでは(あるいはMS Excelもそうだろうが)計算出来ず。
SpeedCrunchマジおすすめ。結果を9.223372036854775807e18としていた。(設定変更すれば50桁までいける)

さて、この大量の数字は、つまり838万≒3バイト,21.4億≒4バイト,5兆4975億≒5バイト
1407兆3748億≒6バイト,9223京3720兆≒8バイト
ということか。データを何個、とかいうレベルじゃねーっす。パねえっす。
だから誰も具体的な数値としていくつ、とか言わない(?)のか何なのか。

だが、そもそも、railsが扱えるかは別問題であろう話。
railsを通してDB作成し、検証してみよう。
少なくとも今のバージョンでこうだ、というのであれ、わかればスッキリ。

railsでscaffoldしrails sしたあとブラウザから入力し、SQLiteに数値を格納してみた。

9223372036854775800 OK
9223372036854775900 NG(数字がおかしくなる)

9223372036854775806 OK
9223372036854775807 OK
9223372036854775808 NG(数字がおかしくなる)
NGの数値を入力したところ、数値が溢れてたデータの入力も出来たし、編集で入力済みデータを呼び出すこともできるが、格納されたデータを呼び出してみると浮動少数になってしまっているようだ。(〜〜〜.0 とか表示されてしまって入力値と異なる数値になってる)

しかし、これで先程の計算通りで合っていることがわかった。
答え:いっぱい
なんだ、最初の結論で合っていたのか。

Ubuntu11.04でRuby on Railsとsqlite3を接続するには 2/9

2.Ubuntuのアップデート

˜$ sudo apt-get update && sudo apt-get -y dist-upgrade

アップデートできたら、再起動します。(カーネル再読み込み)

˜$ sudo reboot

再起動できたら、再びSSHか端末で入る。
再起動後、APTの自動削除を使って古いカーネルを削除する。

˜$ sudo apt-get autoremove

Ubuntu11.04でRuby on Railsとsqlite3を接続するには 9/9

9.クラスの新規作成(rails generate)

DBテーブル(のモデルクラス)作成

rails generate model TABLENAME COLUMNNAME:DATATYPE COLUMNNAME:DATATYPE ・・・
このような書式になるらしい。

試しに、こんなテーブルを想定してみた。
テーブル名:siyaku
登録されたものが試薬かどうか?(yes / no)
管理コード番号(数字)
名前(文字列)

TABLE siyaku
siyaku:boolean
si_code:integer
si_name:string

これをrails コマンドで実行するとこうなった。
/opt/kanridb$ sudo rails generate model siyaku siyaku:boolean si_code:integer si_name:string
> invoke active_record
> create db/migrate/20110921061333_create_siyakus.rb
> create app/models/siyaku.rb
> invoke test_unit
> create test/unit/siyaku_test.rb
> create test/fixtures/siyakus.yml
(ちょっとだけ時間かかる)


# sudo rake db:migrate
# rake aborted!
# uninitialized constant Rake::DSL
# /usr/local/lib/ruby/1.9.1/rake.rb:2482:in `const_missing'
# /usr/local/lib/ruby/gems/1.9.1/gems/rake-0.9.2/lib/rake/tasklib.rb:8:in <class:TaskLib>'
# ローカルでやった場合は、なぜか失敗した。Gemfileを編集してgem 'rake', '0.8.7'を1行追記した
# リモートでやった場合は、なぜか失敗しなかった。
失敗した場合というのは、以下の通りGemfileを編集して、もう一度試すとうまくいった。

/opt/kanridb$ sudo vi Gemfile
# 1行追記
gem 'rake', '0.8.7'

gem 'rails', '(バージョン)' の行の1つ下にでも入れておこう。

/opt/kanridb$ sudo bundle update rake

> Using rake (0.8.7)
Your bundle is updated! Use `bundle show [gemname]` to see where a bundled gem is installed.


/opt/kanridb$ sudo rake db:migrate

> -- create_table(:siyakus)
> -> 0.0015s
> == CreateSiyakus: migrated (0.0016s) =========================================

こんな感じのが出てくれば、migrate完了です。




次に、データをsqliteにぶちこんでみる。
/opt/kanridb$ sudo vi test/fixtures/siyakus.yml
(コメント以下を全て編集、変更する)
# Read about fixtures at http://api.rubyonrails.org/classes/Fixtures.html

one:
siyaku: true
si_code: 1
si_name: アルミニウム、粉末

two:
siyaku: true
si_code: 2
si_name: 塩化カリウム

three:
siyaku: true
si_code: 3
si_name: 酒石酸ナトリウムカリウム四水和物

(変更ここまで)

/opt/kanridb$ sudo rake db:fixtures:load FIXTURES=siyakus

なぜか書籍では、FIXTURES=siyakus.yml とした方法が紹介されていたが、試したところrake aborted!というエラーとなってしまった。書籍の問題なのかバージョンの違いによるものなのか不明だが、どうもこの場合、.ymlがいらないっぽい。

無事完了出来たので、試しにSQLiteにデータが入っているのを確認してみた
rails dbconsole
sqlite> .tables
> schema_migrations siyakus

sqlite> .schema siyakus
> CREATE TABLE "siyakus" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "siyaku" boolean,
> "si_code" integer, "si_name" varchar(255), "created_at" datetime, "updated_at" datetime);

sqlite> select * from siyakus;
113629430|t|3|酒石酸ナトリウムカリウム四水和物|2011-09-21 08:21:24|2011-09-21 08:21:24
298486374|t|2|塩化カリウム|2011-09-21 08:21:24|2011-09-21 08:21:24
980190962|t|1|アルミニウム、粉末|2011-09-21 08:21:24|2011-09-21 08:21:24

それぞれテーブル名確認、テーブル構造確認、テーブル内全データ表示となる。
各レコードに、作成日時と変更日時が自動的に登録されているのが見れる。ここでの時刻はUTCのようだ。+9時間すると、日本時間になる。

sqlite> .quit


書籍では、あと2つのクラスを作成する。という内容だった。
書籍で記入されている通りなので割愛。概略としては、このような感じ。

rails generate controller NAME として、コントローラを作成する。(NAME=任意で名前を付ける。半角英数小文字のみ使用)
app/controllers/NAME_controller.rb を編集して2行の間に3行突っ込む
def list
@siyakus = Siyaku.all
end

app/views/NAME/list.html.erbというビューを新規作成してHTMLのtableを作る
<table border="1">
<% @siyakus.each do |siyaku| %>
  <tr>
    <td><%= siyaku.siyaku %<>/td>
    <td><%= siyaku.si_code %<>/td>
    <td><%= siyaku.si_name %<>/td>
  </tr>
<% end %>
</table>
↑ここでタブを使ったらいかん、らしい。必ず、あくまで空白でタグを右にずらす。

ブラウザからデータを見れるよう、1か所設定する
config/routes.rbの最終行から2番目のコメントアウトされた行のコメントを外して設定を活かす

vi config/routes.rb
match ':controller(/:action(/:id(.:format)))'

あとは何かローカルのブラウザを使って表示するだけ。
http://127.0.0.1:3000/NAME/list

sqliteのときのselect * from siyakus;で見られたデータが、ブラウザで見れました。完

 | ホーム |  »

プロフィール

だーくちぇりー

Author:だーくちぇりー
名前:darkcherry(だーくちぇりー)
特技:器用貧乏
職業:まぜまぜ屋

QRコード

QR

検索フォーム

    上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。