RailsでWebさーびす作ってみる-4日目-


ふとコントローラでDBからレコードを読み込むよーにして

def show
  @recruiter = Recruiter.all
end

表示させてみたら、エラーでてきた。

undefined method `star' for Arel:Module

arel モジュールに star メソッドがないとのことでソース見てみるとほんとにない!

arel-2.0.9 には star メソッドないんだね。

arel-2.1.0 には star メソッドあるからアップデートすればおkかと思ったけど、

gem の依存関係ぽいエラーでてうまくいかない・・!

そもそも Rails-3.1.0.beta の最新版じゃなくて安定版使ったほうがいいね。

Rails-3.0.7 を使うことにして、他の gem とかも最新版はやめとこー。

Gemfile を修正して、

source 'http://rubygems.org'

gem 'rails', '>=3.0.0'
gem "rack"
gem 'mysql'
gem 'jquery-rails'

group :development, :test do
  gem "rspec-rails"
  gem "rspec"
  gem 'spork'
  gem "cucumber"
  gem "cucumber-rails"
  gem "webrat"
  gem "mechanize"
  gem 'ruby-debug19'
  gem 'annotate-models'
  gem 'rb-fsevent'
  gem 'guard-spork'
  gem 'guard-rspec'
  gem 'guard-cucumber'
end

インスト。

$ bundle install

エラーでなくなった!

RailsでWebさーびす作ってみる-3日目-


やっとこ3日目、果たしてリリースできるのかー!

トップページだけでも見れるようにしましょ。

最初はてすと書く

TDDだとテスト書いてからコード書くよーなのです。

spork 動かさないともっさりすぎるので起動。

$ spork

トップページとかのコントローラは PagesController にする。

$ rails g controller Pages home

PagesController のテストも自動で作られちゃっててステキ。

spec/controllers/pages_controller_spec.rb

require 'spec_helper'

describe PagesController do

  describe "GET 'home'" do
    it "should be successful" do
      get :home
      response.should be_success
    end
  end

end

てすとさーば動かしてテストしてみる。

$ rails server
$ rspec spec/controllers/pages_controller_spec.rb

PagesController
GET 'home'
. should be successful


Finished in 0.92794 seconds
1 example, 0 failures

Finished in 0.92794 seconds
1 example, 0 failures

よさそうだねー。
config/routes.rb にデフォルトページを追加しとく。

root :to => "pages#home"

おkおk。

TDDぽくテスト書いてトップのデザインやってみよ。

タイトルのテスト付け足して。

# encoding: utf-8

require 'spec_helper'

describe PagesController do
  render_views

  describe "GET 'home'" do
    before do
      get 'home'
    end

    it "should be successful" do
      response.should be_success
    end

    it "should have the title" do
      response.should have_selector("title", :content => "Alcapa")
    end
  end
end

複数のテストで共通の初期処理なんかは before に入れとくんだね。

てすとしよー。

$ rspec spec/controllers/pages_controller_spec.rb

もち失敗。

Failures:

1) PagesController GET 'home' should have the title
Failure/Error: response.should have_selector("title", :content => "Alcapa")
expected following output to contain a Alcapa tag:

てすとが通るよーに実装

トップページがんがる。

開発の順番ちょーてきとー。

タイトルの設定の仕方が Rails3 ではちょと変わったみたい。

app/views/layouts/application.html.erb

Rails 2 だと

<%= yield(:title) || 'Alcapa' %>

Rails 3 だとこんな感じ。

<%= content_for?(:title) ? yield(:title) : 'Alcapa' %>

ビューの方はこんなん。

<% content_for :title do -%>Alcapa<% end -%>

テンプレに埋め込む値をそれぞれのビューの方で設定してやるんだねー。

URL考えてみる

トップも見れるようになったし、URL考えてみる。

Rails3 だと RESTful なアプリがオススメされてるぽいので、それっぽく。

募集する方 -> recruiter
お仕事 -> offer

Gemfile はこんな感じ?

root :to => "pages#home"

resource :recruiter do
  resources :offers
end

match '/home', :to => 'pages#home'

REST で認証ってよくわからないねー。

セッションで状態管理すること止めないといけないんかな?

まー今回はセッション管理を捨てない方向で。

ルーティングを見てみる。

$ rake routes

うん、それっぽいネ!

次はいよいよ機能を実装してきましょー!

RailsでWebさーびす作ってみる-2日目-



大分日が空いてしまた。

ぎゃーすぎゃーす。

チーズベーコンパン食べて気を取り直してがんがる。

2日目はなにしよかなー。

デザイン決める

デザインあった方がやる気でるので決めちゃう。

てきとーにテンプレサイトをググる

よし、ちょー簡単なやつにしよう!

タイトル画像つくる

フォトショにチャレンジ1年生してみる。

いみふ・・!

使い方まったくわからないのでチュートリアルでお勉強。

四角形の塗りつぶし方

選択範囲つーるとやらで四角形を作ったら、

「編集」「塗りつぶし」で塗りつぶしできた。

作った画像の保存のしかた

作ったやつを「ファイル」「別名で保存」を選んで、

拡張子てきとーなやつで保存。

ちなみにWebサイトで使われる画像の拡張子は↓の3つ。

jpeg

色数が多い写真向き。
でもテキストとかイラストだとノイズが混じるらしー。

・gif

256色までしか使えないけどとっても軽い。

png

テキストでも写真でもどんとこい!みたいな。

タイトル完成!

こんな感じ。



これだけで1時間半かかったのは内緒。

RailsでWebさーびす作ってみる-初日-


明日からダイエッツするぞー!

・・・目標決めても3日で飽きちゃう。

なので日記にして強制してみようそもって。

新人プログラマのWebさーびすプロジェクツの発足です。

ぱちぱちぱちー。

なに作る?

んー昨今の朝マック事情では元気なじーちゃん率が高いそもって。
若者の年金負担率の軽減のため、元気じーちゃん就活サイトにしよー。

いろいろ

・fedora14
Ruby1.9.2
・Rails3.1.0.beta
・viでごりごり(rails.vimとかproject.vim)

さーびすの環境作る

なにはともあれプロジェクト作る。
rspecjquery 使うから test と prototype.js とかいらない。
プロジェクト名はあるかぱ(意味なし!)に。

$ rails new alcapa -T -J

Gemfile にそれっぽい Gem を詰めこみ。
TDDちっくにしてみる。

gem 'rails', :git => 'git://github.com/rails/rails.git'
gem "rack", :git => 'git://github.com/rack/rack.git'
gem 'mysql'
gem 'jquery-rails'

group :development, :test do
  gem "rspec-rails", ">= 2.5.0"
  gem 'spork', '~> 0.9.0.rc'
  gem "cucumber",         :git => "git://github.com/aslakhellesoy/cucumber.git"
  gem "cucumber-rails",   :git => "git://github.com/aslakhellesoy/cucumber-rails.git"
  gem "capybara"
  gem "capybara-envjs"
  gem "database_cleaner", :git => 'git://github.com/bmabey/database_cleaner.git'
  gem 'ruby-debug19'
end

まとめてインスト。

$ bundle install

えらー出ちゃった。

extensions': ERROR: Failed to build gem native extension. (Gem::Installer::ExtensionBuildError)

/home/homepage/.rvm/rubies/ruby-1.9.2-rc2/bin/ruby extconf.rb
checking for libxml/parser.h... no

        • -

libxml2 is missing. please visit http://nokogiri.org/tutorials/installing_nokogiri.html for help with installing dependencies.

        • -

Nokogiri で使ってる libxml2 ないと怒られたのでインスト。

$ sudo yum install -y libxml2 libxml2-devel libxslt libxslt-devel

再チャレンジ!

$ bundle install

今度は capybara で使ってる johnson がエラー。

js_land_proxy.h:11:18: fatal error: node.h: No such file or directory

johnson は ruby1.9 に対応してないのかな?
capybara はやめて webrat にする

gem 'rails', :git => 'git://github.com/rails/rails.git'
gem "rack", :git => 'git://github.com/rack/rack.git'
gem 'mysql'
gem 'jquery-rails'

group :development, :test do
  gem "rspec-rails", ">= 2.5.0"
  gem 'spork', '~> 0.9.0.rc'
  gem "cucumber",         :git => "git://github.com/aslakhellesoy/cucumber.git"
  gem "cucumber-rails",   :git => "git://github.com/aslakhellesoy/cucumber-rails.git"
  gem "webrat"
  gem "mechanize"
#  gem "capybara"
#  gem "capybara-envjs"
#  gem "database_cleaner", :git => 'git://github.com/bmabey/database_cleaner.git'
  gem 'ruby-debug19'
end

気を取り直して!

$ bundle install

ruby-debug でエラー。

Installing linecache19 (0.5.12) /home/homepage/.rvm/rubies/ruby-1.9.2-rc2/lib/ruby/1.9.1/rubygems/installer.rb:164:in `install': linecache19 requires Ruby version >= 1.9.2. (Gem::InstallError)

どーやら ruby1.9 だとまだよろしくないようで。
個別に入れてみる。

gem install ruby-debug19 -- --with-ruby-include=/home/homepage/.rvm/src/ruby-1.9.2-rc2/
gem install ruby-debug-ide19 -- --with-ruby-include=/home/homepage/.rvm/src/ruby-1.9.2-rc2/

今度こそー!

$ bundle install

おーけー。
お次は rspec の設定。

$ rails g rspec:install

.rspec ファイルができるので表示フォーマットとかの設定。
spork を使うので --drb もいれとく。

--colour
--format progress
--drb
-fs

spork の設定。
spork ないと rspec のテストがもっさり。

$ spork --bootstrap

spec/spec_helper.rb を spork 用に修正。

require 'rubygems'
require 'spork'

Spork.prefork do
  # Loading more in this block will cause your tests to run faster. However,
  # if you change any configuration or code from libraries loaded here, you'll
  # need to restart spork for it take effect.

  ENV["RAILS_ENV"] ||= 'test'
  require File.expand_path("../../config/environment", __FILE__)
  require 'rspec/rails'

  # Requires supporting ruby files with custom matchers and macros, etc,
  # in spec/support/ and its subdirectories.
  Dir[Rails.root.join("spec/support/**/*.rb")].each {|f| require f}

  RSpec.configure do |config|
    # == Mock Framework
    #
    # If you prefer to use mocha, flexmock or RR, uncomment the appropriate line:
    #
    # config.mock_with :mocha
    # config.mock_with :flexmock
    # config.mock_with :rr
    config.mock_with :rspec

    # Remove this line if you're not using ActiveRecord or ActiveRecord fixtures
    config.fixture_path = "#{::Rails.root}/spec/fixtures"

    # If you're not using ActiveRecord, or you'd prefer not to run each of your
    # examples within a transaction, remove the following line or assign false
    # instead of true.
    config.use_transactional_fixtures = true
  end
end

Spork.each_run do
  # This code will be run each time you run your specs.

end

cucumber の設定。
オプションもそれっぽく。

rails generate cucumber:install --webrat --rspec --spork

ラストにDBの設定。

$ vi config/database.yml

DB は mysql 使うつもり。
コンソールからそれぞれのDB作成

mysql> create database alcapa default character set utf8;

準備ばっちし!
サーバ起動してみる。

$ rails server -u

動いてるぽいねー。
記念に git 使う。

$ git init
$ git add .
$ git commit -m "init"

開発環境できましたー!

preupgrade を使って fedora11 -> fedora13

基本的には下記の通りだけど、そのまま preupgrade-cli コマンドを
実行するとエラーがでるかもなので注意。

■公式サイト
http://fedoraproject.org/wiki/PreUpgrade

■エラー内容

Traceback (most recent call last):
File "/usr/share/preupgrade/preupgrade-cli.py", line 323, in
pu.main(myrelease)
File "/usr/share/preupgrade/preupgrade-cli.py", line 261, in main
if not self.userconfirm():
File "/usr/share/yum-cli/output.py", line 629, in userconfirm
choice = raw_input(_('Is this ok [y/N]: '))
UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-7: ordinal not in range(128)


■対策

エラーの原因は文字コードによるものなので、
下記によって文字コードを設定してからアップグレード。

# export LANG=en_US.UTF-8
# preupgrade-cli "Fedora 13ex (Goddard)"