Ruby on Rails (3.x >= 3.2.9) のためのブログです (どっちかというと社内ブログ的な感じで、基礎から書いてきます) 。
Comments


Ruby の コーディング規約に関しては、以下の記事を参考にするとよさそうです。



備考:

  • rubyはメソッド呼び出しの際に括弧を省略できるが、p や attr_accessor など慣例的に丸括弧を省略する場合以外、丸括弧を書く
  • 一応、rdocに沿ったコメントを書く

など、意識してけばいいのではないでしょうか。



[...]

Categories: , ,
Comments


migrationファイル (db/migration 以下) は、[タイムスタンプ]_create_users.rb の様に、タイムスタンプがファイル名の先頭についています。

このファイルは、以下のコマンドを利用すれば簡単に作成できます。

$ rails generate migration [hogehoge]
    invoke  active_record
    create    db/migrate/20121206214547_[hogehoge].rb

[hogehoge] に指定した文字列とタイムスタンプをつなげた名前のファイルが、db/migrate 以下に作成されます。

※ rails generate model [mogera]
のように、model を作成した場合は、rails generate migration create_[mogera] としたのと同じ、20121204111949_create_users.rb のようなファイルが作成されます。
[...]

Categories: , , , , ,
Comments

Javaには JavaDocとよばれる、JavaのソースコードからHTML形式のAPI仕様書を作成してくれるものがありますよね。

①ドキュメントの生成方法・コマンド


ruby では RDoc と呼ばれるものがあります。
今回は Rails で RDocを使用する方法を書いておきます。
# 現在のアプリのドキュメントファイルを作成する
$ rake doc:app

# アプリのドキュメントファイルを削除する
$ rake doc:clobber_app

# 現在あるドキュメントを強制的に上書きする
$ rake doc:reapp


# railsに関するドキュメントを作成する
$ rake doc:rails

ほかは [ rakeのタスク一覧 ] に書いてあるので見てみて下さい。



②RDoc の書き方


次に, RDoc の書き方については、以下の記事が参考になります。

どうせコメントを書くなら、少し RDoc を意識して書くと後々よさげ





[...]

Categories: , , ,
Comments

以下のコマンドで、一覧を見れます。
$ rake -T
rake about                          # List versions of all Rails frameworks and the environment
rake assets:clean                # Remove compiled assets
rake assets:precompile       # Compile all the assets named in config.assets.precompile
rake db:create                     # Create the database from DATABASE_URL or config/database.yml for the current Rails.env (use db:create:all to create all dbs in the config)
rake db:drop                       # Drops the database using DATABASE_URL or the current Rails.env (use db:drop:all to drop all databases)
rake db:fixtures:load           # Load fixtures into the current environment's database.
rake db:migrate                   # Migrate the database (options: VERSION=x, VERBOSE=false).
rake db:migrate:status        # Display status of migrations
rake db:rollback                   # Rolls the schema back to the previous version (specify steps w/ STEP=n).
rake db:schema:dump         # Create a db/schema.rb file that can be portably used against any DB supported by AR
rake db:schema:load           # Load a schema.rb file into the database
rake db:seed                        # Load the seed data from db/seeds.rb
rake db:setup                      # Create the database, load the schema, and initialize with the seed data (use db:reset to also drop the db first)
rake db:structure:dump       # Dump the database structure to db/structure.sql. Specify another file with DB_STRUCTURE=db/my_structure.sql
rake db:version                    # Retrieves the current schema version number
rake doc:app                       # Generate docs for the app -- also available doc:rails, doc:guides, doc:plugins (options: TEMPLATE=/rdoc-template.rb, TITLE="Custom Title")
rake log:clear                      # Truncates all *.log files in log/ to zero bytes
rake middleware                  # Prints out your Rack middleware stack
rake notes                          # Enumerate all annotations (use notes:optimize, :fixme, :todo for focus)
rake notes:custom             # Enumerate a custom annotation, specify with ANNOTATION=CUSTOM
rake rails:template              # Applies the template supplied by LOCATION=(/path/to/template) or URL
rake rails:update                 # Update configs and some other initially generated files (or use just update:configs, update:scripts, or update:application_controller)
rake routes                         # Print out all defined routes in match order, with names.
rake secret                         # Generate a cryptographically secure secret key (this is typically used to generate a secret for cookie sessions).
rake stats                          # Report code statistics (KLOCs, etc) from the application
rake test                            # Runs test:units, test:functionals, test:integration together (also available: test:benchmark, test:profile, test:plugins)
rake test:recent                 # Run tests for {:recent=>"test:prepare"} / Test recent changes
rake test:single                  # Run tests for {:single=>"test:prepare"}
rake test:uncommitted      # Run tests for {:uncommitted=>"test:prepare"} / Test changes since last checkin (only Subversion and Git)
rake time:zones:all             # Displays all time zones, also available: time:zones:us, time:zones:local -- filter with OFFSET parameter, e.g., OFFSET=-6
rake tmp:clear                    # Clear session, cache, and socket files from tmp/ (narrow w/ tmp:sessions:clear, tmp:cache:clear, tmp:sockets:clear)
rake tmp:create                  # Creates tmp directories for sessions, cache, sockets, and pids

でも、実際は rake db:migrate:reset など、他にもコマンドがあるんですが、この中には載ってないようです。。。。。
全部観たい!!と思ってたのですが、よく調べ方がわかりませんでした。。。


description が載っていないのでよければ、以下のコマンドで調べれらます。

$ rake -P | grep rake
rake about
rake assets:clean
rake assets:clean:all
rake assets:environment
rake assets:precompile
rake assets:precompile:all
rake assets:precompile:nondigest
rake assets:precompile:primary
rake db:_dump
rake db:abort_if_pending_migrations
rake db:charset
rake db:collation
rake db:create
rake db:create:all
rake db:drop
rake db:drop:all
rake db:fixtures:identify
rake db:fixtures:load
rake db:forward
rake db:load_config
rake db:migrate
rake db:migrate:down
rake db:migrate:redo
rake db:migrate:reset
rake db:migrate:status
rake db:migrate:up
rake db:reset
rake db:rollback
rake db:schema:dump
rake db:schema:load
rake db:schema:load_if_ruby
rake db:seed
rake db:sessions:clear
rake db:sessions:create
rake db:setup
rake db:structure:dump
rake db:structure:load
rake db:structure:load_if_sql
rake db:test:clone
rake db:test:clone_structure
rake db:test:load
rake db:test:load_schema
rake db:test:load_structure
rake db:test:prepare
rake db:test:purge
rake db:version
rake default
rake doc
rake doc/api
rake doc/api/index.html
rake doc/app
rake doc/app/index.html
rake doc:app
rake doc:clobber
rake doc:clobber_app
rake doc:clobber_plugins
rake doc:clobber_rails
rake doc:guides
rake doc:plugins
rake doc:rails
rake doc:reapp
rake doc:rerails
rake environment
rake log:clear
rake middleware
rake notes
rake notes:custom
rake notes:fixme
rake notes:optimize
rake notes:todo
rake rails:template
rake rails:templates:copy
rake rails:update
rake rails:update:application_controller
rake rails:update:configs
rake rails:update:scripts
rake rails_env
rake railties:install:migrations
rake routes
rake secret
rake stats
rake test
rake test:benchmark
rake test:functionals
rake test:integration
rake test:plugins
rake test:prepare
rake test:profile
rake test:recent
rake test:run
rake test:single
rake test:uncommitted
rake test:units
rake time:zones:all
rake time:zones:local
rake time:zones:us
rake tmp:cache:clear
rake tmp:clear
rake tmp:create
rake tmp:pids:clear
rake tmp:sessions:clear
rake tmp:sockets:clear


こんな感じですね。
ちなみに Rails 3.2.9 です。どっかのバージョンでは、rake -T で全部見れたらしいのですが。。いちおうそれが載ってる記事があったので、紹介します。

rake --helpとrake -Tの実行結果 ]

以上〜。



[...]

Categories: , , ,
Comments

modelの作成方法についてメモを残しておきます。

Railsにはscaffoldという機能があり、コレを使うと作成・更新・一覧表示などの機能をもったものを自動で作成してくれます。(詳細はググって下さい)
ただ、ここではこのscaffoldは使用しないものとします。




それでは。Userモデルを作成してみます

① モデル作成


# userモデルの作成
$ rails generate model user
      invoke  active_record
      create    db/migrate/20121204111949_create_users.rb
      create    app/models/user.rb
      invoke    test_unit
      create      test/unit/user_test.rb
      create      test/fixtures/users.yml

このコマンドにより。app/models/user.rb と、test配下のファイル、また、db/migrate/[timestamp]_create_users.rb が作成されます。



② db/migrate ファイルの編集


①で作成されたdb/migrate/[timestamp]_create_users.rb を開いて、以下のように編集

class CreateUsers < ActiveRecord::Migration
  def change
    create_table :users do |t|
      t.string :email, :null=>false

      t.timestamps
    end
  end
end

t.[データ型] :[カラム名],[オプション] の形式です。
ここで、Rails3系において使用出来るデータ型は、先程のURL先に書いてありますので、ご参照下さい。

ここで、t.timestamps を書いておけば、動的に created_at (作成日)updated_at (更新日) を追加してくれます。

ActiveRecord::Migration のメソッドに関しては、[コチラ] を参照。
あとは[ ココ(pentan.info) ]が非常にわかいやすくまとめて下さっています。



③ migrate処理を行う


# アプリケーションのルートディレクトリで以下を実行
rake db:migrate

これにより、先程編集した[timestamp]_create_users.rb の通りに、テーブルが作成されます。

マイグレーションに関するコマンドのリファレンスは [コチラ] を参照



④ modelに処理を書いてく

class User < ActiveRecord::Base
  def findall
    @users = User.all
  end
end

こんな感じで....
基本的に、Railsは「convention over configuration」(設定より規約) なので、データベース名やカラム名が規約と異ったりしない場合は何もかかなくてOKな様です。(つまり、migrateしてテーブルを作成した後は、modelにどんどんロジックを書いてくだけでOK)


とりあえず、今回はこんなとこです。


[...]

Categories: , , , , ,
Comments


基本的には以下の構成 (http://kinjo.github.com/ojag-rails/ を参考にしてます)

|-- app                                 # アプリのソースコード
|   |-- assets                          #
|   |   |-- images                      # 画像ファイル
|   |   |-- javascripts                 # javascript(CoffeeScript) ファイル
|   |   `-- stylesheets                 # stylesheet(SCSS) ファイル
|   |-- controllers                     # コントローラファイル
|   |-- helpers                         # ビューで使用するヘルパーファイル
|   |-- mailers                         #
|   |-- models                          # モデルをおきます
|   `-- views                           # ビューをおきます
|       `-- layouts                     # レイアウトに関するview
|-- config                              # アプリの設定ファイル
|   |-- application.rb                  # autoloadの設定などは
|   |-- boot.rb                         #
|   |-- database.yml                    # データベースの接続設定
|   |-- environment.rb                  #
|   |-- environments                    # 各実行モード (development, test, production) の設定
|   |   |-- development.rb              #
|   |   |-- production.rb               #
|   |   `-- test.rb                     #
|   |-- initializers                    # 使用する外部ライブラリやその設定等があれば initializers 配下に設定ファイルを作成します
|   |-- locales                         # 多言語化用の設定をおきます
|   |   `-- en.yml                      #
|   `-- routes.rb                       # URLとコントローラの対応付け(後述)を設定します。
|-- config.ru                           #
|-- db                                  #
|   `-- seeds.rb                        # 初期データの登録処理を書きます
|-- doc                                 #
|   `-- README_FOR_APP                  #
|-- lib                                 # 外部ライブラリやアプリ全体で使用するメソッドをおきます
|-- log                                 # アプリの実行時のログがあります
|   `-- development.log                 #
|-- public                              #
|-- script                              #
|-- test                                # テストプログラム
|-- tmp                                 #
`-- vendor                              # 外部ライブラリの内、プラグインと呼ばれるものは vendor 配下におかれます


  • htmlに関してはview, viewで使用するクラスなどはhelpersに
  • 基本的にモデルにロジックを書くこと
  • libディレクトリに、外部のディレクトリや独自モジュールなどを置く
  • アプリケーションと独立してるものはlibに置くけど、そうでなくアプリケーション独自のもの(アプリケーションに対して独立してないもの)は、正直appの外のlib内には置きたくない→app/配下に独自ディレクトリを作成し、autoloadする
  • autoloadに関しては、config, のapplication.rb で設定 (autoload対象のディレクトリを指定。その際に、app/配下の独自ディレクトリを指定すれば、それが使える)

こんな感じです。他のブログなどでは、lib に格納ってのがほとんどでしたが、アプリケーションとの結びつきが強いものをappディレクトリ外に置くのはなんか気持ち悪いので、とりあえずこの構成で開発することにします。
[...]

Categories: , ,
Comments
Comments

次に、Railsのプロジェクトを作成してみます。

RailsからMySQLを使用する場合、
http://www.oyabunn.com/wordpress/archives/60 こことか参考になるかも
# 使用するデータベースとしてmysqlを指定
$ rails new sample --database=mysql

ちなみに、データベースを指定しない場合はSQLiteになります。
プロジェクトが作成されたら、config/database.ymlを編集して(Host, User, Passwordを指定)、 実際に起動してみます

# サーバー起動
$ cd sample
$ rails server

するとこんなエラーが。。。。
/Users/yusuke/.rbenv/versions/1.9.3-p0/lib/ruby/gems/1.9.1/gems/mysql2-0.3.11/lib/mysql2.rb:9:in `require': dlopen(/Users/yusuke/.rbenv/versions/1.9.3-p0/lib/ruby/gems/1.9.1/gems/mysql2-0.3.11/lib/mysql2/mysql2.bundle, 9): Library not loaded: libmysqlclient.18.dylib (LoadError)
  Referenced from: /Users/yusuke/.rbenv/versions/1.9.3-p0/lib/ruby/gems/1.9.1/gems/mysql2-0.3.11/lib/mysql2/mysql2.bundle
  Reason: image not found - /Users/yusuke/.rbenv/versions/1.9.3-p0/lib/ruby/gems/1.9.1/gems/mysql2-0.3.11/lib/mysql2/mysql2.bundle
 from /Users/yusuke/.rbenv/versions/1.9.3-p0/lib/ruby/gems/1.9.1/gems/mysql2-0.3.11/lib/mysql2.rb:9:in `'
 from /Users/yusuke/.rbenv/versions/1.9.3-p0/lib/ruby/gems/1.9.1/gems/bundler-1.2.2/lib/bundler/runtime.rb:68:in `require'
 from /Users/yusuke/.rbenv/versions/1.9.3-p0/lib/ruby/gems/1.9.1/gems/bundler-1.2.2/lib/bundler/runtime.rb:68:in `block (2 levels) in require'
 from /Users/yusuke/.rbenv/versions/1.9.3-p0/lib/ruby/gems/1.9.1/gems/bundler-1.2.2/lib/bundler/runtime.rb:66:in `each'
 from /Users/yusuke/.rbenv/versions/1.9.3-p0/lib/ruby/gems/1.9.1/gems/bundler-1.2.2/lib/bundler/runtime.rb:66:in `block in require'
 from /Users/yusuke/.rbenv/versions/1.9.3-p0/lib/ruby/gems/1.9.1/gems/bundler-1.2.2/lib/bundler/runtime.rb:55:in `each'
 from /Users/yusuke/.rbenv/versions/1.9.3-p0/lib/ruby/gems/1.9.1/gems/bundler-1.2.2/lib/bundler/runtime.rb:55:in `require'
 from /Users/yusuke/.rbenv/versions/1.9.3-p0/lib/ruby/gems/1.9.1/gems/bundler-1.2.2/lib/bundler.rb:128:in `require'
 from /Users/yusuke/website/RAILS/sample/config/application.rb:7:in `'
 from /Users/yusuke/.rbenv/versions/1.9.3-p0/lib/ruby/gems/1.9.1/gems/railties-3.2.9/lib/rails/commands.rb:53:in `require'
 from /Users/yusuke/.rbenv/versions/1.9.3-p0/lib/ruby/gems/1.9.1/gems/railties-3.2.9/lib/rails/commands.rb:53:in `block in '
 from /Users/yusuke/.rbenv/versions/1.9.3-p0/lib/ruby/gems/1.9.1/gems/railties-3.2.9/lib/rails/commands.rb:50:in `tap'
 from /Users/yusuke/.rbenv/versions/1.9.3-p0/lib/ruby/gems/1.9.1/gems/railties-3.2.9/lib/rails/commands.rb:50:in `'
 from script/rails:6:in `require'
 from script/rails:6:in `
'

そこで、(http://stackoverflow.com/questions/4546698/library-not-loaded-libmysqlclient-16-dylib-error-when-trying-to-run-rails-servを参考に)以下のコマンドを実行

sudo ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dy


もう一度サーバーを起動してみます。
(....と、その前に,DBのmigrateをしてみます詳しくは http://railsdoc.com/references/rake%20db:migrate )
rake db:migrate
これで、実際にDBにつながって、schema_migrations テーブルが作成されました!


# サーバー起動
$ rails server
=> Booting WEBrick
=> Rails 3.2.9 application starting in development on http://0.0.0.0:3000
=> Call with -d to detach
=> Ctrl-C to shutdown server
[2012-12-03 17:05:14] INFO  WEBrick 1.3.1
[2012-12-03 17:05:14] INFO  ruby 1.9.3 (2011-10-30) [x86_64-darwin11.4.2]
[2012-12-03 17:05:14] INFO  WEBrick::HTTPServer#start: pid=71027 port=3000

起動できました!! http://localhost:3000/ にアクセスしてみて下さい。

<備考...>
サブドメイン切ったりなどで、VirtualHost でrailsサーバーを複数たちあげたい場合は、その手前にApacheをはさめばいいのかな??
<VirtualHost *:80>
  ProxyPreserveHost On
  ServerName www.hogehoge.com
  ProxyPass / http://127.0.0.1:3000/
  ProxyPassReverse / http://127.0.0.1:3000/
</VirtualHost>
例えばこんな感じで。。。そこらへんまだ詳しくないです。
[...]

Categories: , , ,
Comments

Mac OS X (10.7 Lion) ローカルにRuby on Railsをインストールします。

まず、homebrew をインストールしてない場合は、インストールをしておいて下さい
(homebrewは便利なので、とりあえずインストールをおすすめします。)

① homebrew で rbenv, ruby-build のインストール
$ brew update
$ brew install rbenv
$ brew install ruby-build

② パスを通す
$ echo 'eval "$(rbenv init -)"' >> ~/.bash_profile
$ . ~/.bash_profile 

③ rbenv で ruby install
$ rbenv install 1.9.3-p0
$ rbenv global 1.9.3-p0 (macでこのrubyを使うように設定)

④ Ruby on Rails インストール
$ gem update
$ gem install rails
$ . ~/.bash_profile

バージョンを確認してみます
$ rails -v
Rails 3.2.9
[...]

Categories: , ,