rspecでテストを書いてみる

まずはこの通りインストールとサンプル実行
http://rspec.info/

$ sudo gem install rspec

プロジェクト/spec/bowling_spec.rb

require 'bowling'

describe Bowling, "#score" do
  it "returns 0 for all gutter game" do
    bowling = Bowling.new
    20.times { bowling.hit(0) }
    bowling.score.should eq(0)
  end
end

プロジェクト/spec/bowling.rb

class Bowling
  def hit(pins)
  end

  def score
    0
  end
end

テストを実行

$ rspec bowling_spec.rb --format nested
Bowling#score
  returns 0 for all gutter game

Finished in 0.00049 seconds
1 example, 0 failures
seiki-no-MacBook-Pro% rspec bowling_spec.rb                
.

Finished in 0.0004 seconds
1 example, 0 failures

ここにもう少し詳しく書いてあるのでこっちの例も実行
http://rubydoc.info/gems/rspec-expectations/frames

# 配列に1が含まれているか
[1,2,3].should include(1)
# 配列に1と2が含まれているか複数指定
[1,2,3].should include(1, 2)
# 配列の最初が1か
[1,2,3].should start_with(1)
# 配列の最初と次が1, 2か
[1,2,3].should start_with(1,2)
# 配列の最後が3か
[1,2,3].should end_with(3)
# 配列の最後が2, 3か
[1,2,3].should end_with(2,3)
{:a => 'b'}.should include(:a => 'b')
# 文字列にis strが含まれているか
"this string".should include("is str")
#文字列がthisから始まっているか
"this string".should start_with("this")
# 文字列がringで終わっているか
"this string".should end_with("ring")

次にRailsのテスト
参考はこちら
http://ginpen.com/2012/02/14/rspec-rails/

$ rake spec

..............................

Finished in 0.6537 seconds
30 examples, 0 failures

Randomized with seed 10553

ここまで実施して、また別の日に実施すると…

$ rake spec

Could not find cocaine-0.4.2 in any of the sources
Run `bundle install` to install missing gems.

エラー発生。。。
前は動いてたのになぜ??

$ which ruby
/usr/bin/ruby

ruby1.9.3をデフォルトに指定していなかったのが原因でした。

rvm use ruby-1.9.3-head --default

として再度

$ rake spec

解決。焦りました。

Sunspotを使ってみる

インストールから検索結果表示を行う

インストールから検索結果表示までの参考
より詳細な設定はこちらを参考

インストール
$ rails g sunspot_rails:install

起動
$ rake sunspot:solr:start

使用するモデル名は「post」とした

app/models/post.rb
class Post < ActiveRecord::Base
    attr_accessible :title, :body
    searchable do
        text :title, :boost => 5
        text :body
    end
end

app/controllers/posts_controller.rb
def index
    @search = Post.search do
        fulltext params[:search]
    end
    @posts = @search.results
end

app/views/posts/index.html.erb
<%= form_tag posts_path, :method => :get do %>
    <%= text_field_tag :search, params[:search] %>
    <%= submit_tag “Search”, :name => nil %>
<% end %>

<% if @posts.present? %>
    <% @posts.each do |post| %>
        タイトル:<%= post.title%><br>
        本文:<%= post.body %><br>
        <br>
    <% end %>
<% end %>

テスト用にDBに3レコード用意

ブラウザで「http://localhost:3000/posts」にアクセスすると
id順に表示される

sunspot_none

タイトルが優先される設定にしてあるので、
入力欄に「3」と入力すると、
3番目のタイトルに一致するため優先されて最初に表示される

sunspot_3

paperclipを使ってみる

まずPaperclipを使うのに必要なimagemagickをインストールする
RMagickは不要

$ brew install imagemagick

今回はエラーは出ずすんなり完了
バージョンの確認
$ brew info imagemagick
imagemagick: stable 6.7.7-6 (bottled), HEAD
http://www.imagemagick.org

次にPaperclipで画像を保存を参考に進める
※参照先の「avatar」カラムは今回「photo」として扱っています

・モデルにhas_attached_fileを追加
app/models/user.rb
class User { :medium => “300×300>”,
        :thumb => “100×100>” }
end

db/migrate/yyyyMMddhhmmss_add_attachment_photo_to_users.rb
class AddAttachmentPhotoToUsers < ActiveRecord::Migration
    def self.up
        change_table :users do |t|
            t.has_attached_file :photo
        end
    end

    def self.down
        drop_attached_file :users, :photo
    end
end

・フォームを以下のようにする
app/views/users/new.html.erb
<%= form_for @user, :html => { :multipart => true } do |form| %>
    <%= form.file_field :photo %><br>
    <%= form.submit %>
<% end %>

・表示はこのようにする
app/views/users/show.html.erb
<% if @user.photo.exists? then %>
    <%= image_tag @user. photo.url %><br>
   <%= image_tag @user. photo.url(:medium) %><br>
    <%= image_tag @user. photo.url(:thumb) %>
<% end %>

このように表示されます

paperclip

exception_notificationでRailsのエラー発生時にメールを送信する

今回はexception_notificationを使ってみます
gmailを利用してエラー発生時にメールを送信する
※トップページ表示用コントローラを以下のようにして
local variable or methodが発生するように仕込んでおいた

def index
  aaa #存在しないメソッド
end

まずはインストール
$ gem install exception_notification

プロジェクト/Gemfile に以下を追加
gem ‘exception_notification’, :require => ‘exception_notifier’

ActionMailerの設定を行う
こちらのGMailを参照
参照先の通りsmtp_tls.rbを作成して、
プロジェクト/config/environment.rbを記載してある通り設定する。
尚、参照先の通りそのままコピペすると
シングルコーテーション、ダブルコーテーションが全角なのでエラーとなるので注意。
※ユーザ名、パスワード等は環境に合わせて変更すること

開発環境で使うので
プロジェクト/config/environments/development.rb に以下を追加

config.middleware.use ExceptionNotifier,
:email_prefix => “[Whatever] “, # Subjectのpreフィックスを記述
:sender_address => %{“notifier” }, # Fromを記述
:exception_recipients => %w{exceptions@example.com} # mail送信する一覧を記述
※メールアドレスは環境に合わせて変更すること

$ rails -s
ブラウザで http://localhost:3000/ にアクセス

↓受信したメール↓
A NameError occurred in top#index:

undefined local variable or method `a’ for #
app/controllers/top_controller.rb:5:in `index’

——————————-
Request:
——————————-

* URL : http://localhost:3000/
* IP address: 127.0.0.1
* Parameters: {“controller”=>”top”, “action”=>”index”}

なかなか情報が少なく苦労しましたが、
なんとか設定完了
gmail使って送信しているので、gmailの送信済みメールでも確認できます

 

RVMのインストール

今回はRVMをインストールし、rubyのバージョン切り替えを行います。

RVMで1.8.7と1.9.3をインストールする。
mac環境でRVMをインストールしようとしたところ、

・RVMのインストールにgitが必要
・gitをインストールするにはMacPortsで行うのがよさそう

MacPortsはdebianでいうところのaptのようなもので
今後のために入れておいた方がよさそうなので入れることにする

MacPortsのインストール

gitのインストール

RVMのインストール

RVMまでインストールしたら早速ruby1.9.3をインストール

$ rvm install 1.9.3

出ましたエラー
Error running ‘make’, please read /Users/kazu_77_74/.rvm/log/ruby-1.9.3-p327/make.log
There has been an error while running make. Halting the installation.

ログを見ると、どうやらreadlineのコンパイルで失敗しているらしい
ここを参考にreadlineをインストール

$ rvm pkg install readline

readlineのインストールでもまたまた出ましたエラー
There is no checksum for ‘http://ftp.gnu.org/gnu/readline/readline-6.2.tar.gz&#8217; or ‘readline-6.2.tar.gz’, it’s not possible to validate it.
If you wish to continue with unverified download add ‘–verify-downloads 1’ after the command.
‘–verify-downloads 1’を付けてと言われたのでその通りに実行

rvm –verify-downloads 1 pkg install readline

readlineはインストール完了。
他にopensslとzlibも必要みたいなのでインストール
opensslは「–verify-downloads 1」なしでOK、zlibは必要

$ rvm pkg install openssl
$ rvm –verify-downloads 1 pkg install zlib

これで入るかな…
$ rvm install 1.9.3 –with-openssl-dir=$HOME/.rvm/usr –with-readline-dir=$HOME/.rvm/usr –with-zlib-dir=$HOME/.rvm/usr

入った模様。確認してみる。

$ rvm list

rvm rubies

=* ruby-1.9.3-p327 [ x86_64 ]

# => – current
# =* – current && default
# * – default

今度は1.8.7をインストール
$ rvm install 1.8.7 –with-openssl-dir=$HOME/.rvm/usr –with-readline-dir=$HOME/.rvm/usr –with-zlib-dir=$HOME/.rvm/usr

またエラー
The provided compiler ‘/usr/bin/gcc’ is LLVM based, it is not yet fully supported by ruby and gems, please read `rvm requirements`.

色々調べてみるとxcodeでデフォルトになったコンパイラ「llvm-gcc」のせいだそうで
ここのgccのインストールを参考にgccをインストール

もう一度

$ rvm install 1.8.7 –with-openssl-dir=$HOME/.rvm/usr –with-readline-dir=$HOME/.rvm/usr –with-zlib-dir=$HOME/.rvm/usr
Error running ‘make’, please read /Users/kazu_77_74/.rvm/log/ruby-1.8.7-p371/make.log
There has been an error while running make. Halting the installation.

1.9.3と同じくreadlineのコンパイルでエラー
コンパイラが変わったからもう1度installの必要があるのでは。
試しにreadlineのインストールから同じことをやってみる

$ rvm –verify-downloads 1 pkg install readline
$ rvm pkg install openssl
$ rvm –verify-downloads 1 pkg install zlib
$ rvm install 1.8.7 –with-openssl-dir=$HOME/.rvm/usr –with-readline-dir=$HOME/.rvm/usr –with-zlib-dir=$HOME/.rvm/usr

今度は入りました

$ rvm list
vm rubies

ruby-1.8.7-p371 [ i686 ]
=* ruby-1.9.3-p327 [ x86_64 ]

# => – current
# =* – current && default
# * – default

1.9.3になっているrubyのバージョンを変更してみる

$ rvm use 1.8.7
$ rvm list

rvm rubies

=> ruby-1.8.7-p371 [ i686 ]
* ruby-1.9.3-p327 [ x86_64 ]

# => – current
# =* – current && default
# * – default

RVMのインストールとrubyのバージョン切り替え完了。

debianにSolrをインストール

まずこちらで概要を把握
http://www.atmarkit.co.jp/fjava/rensai4/bigdata_java01/01.html

apache solrを動かすためにはJavaが必要とのこと。
入っていないのでまずJavaをインストール。

$ aptitude search java

java6-sdkをインストールすることに

# aptitude install java6-sdk

“java6-sdk” is a virtual package provided by:
default-jdk openjdk-6-jdk
You must choose one to install.

おや、default-jdk openjdk-6-jdkのどっちか選べだって。
後者を選択

# aptitude install openjdk-6-jdk

無事入ったのでバージョン確認
$ java -version

java version “1.6.0_18”
OpenJDK Runtime Environment (IcedTea6 1.8.13) (6b18-1.8.13-0+squeeze2)
OpenJDK 64-Bit Server VM (build 14.0-b16, mixed mode)

次にapache solrをインストール

apache solrをダウンロード
$ wget http://ftp.kddilabs.jp/infosystems/apache/lucene/solr/3.6.0/apache-solr-3.6.0.tgz

ダウンロードしたファイルを解凍して起動
$ tar zxvf apache-solr-3.6.0.tgz
cd apache-solr-3.6.0/example
java -jar start.jar &

ブラウザで起動を確認
http://192.168.1.22:8983/solr/admin/

apache solr test start


起動後はこちらを参考に動かしてみる
http://www.atmarkit.co.jp/fjava/rensai4/bigdata_java01/03.html

$ java -jar exampledocs/post.jar exampledocs/*.xml
の後にQuery String:の「search」ボタン押下
21件インデックスが登録されていることを確認

solrのANALYSISリンクを押下して
入力されたテキストの解析結果がどのようになるか確認してみる

apache solr test analyze
表示されました

次回はRubyについてやっていく予定です

debianにmysqlをインストール

インストール参考はこちら
http://d.hatena.ne.jp/Loups-garous/20080919/1221816870

まずはどのパッケージを使うか見てみる
aptitude search mysql

今回は5.5をインストールする
aptitude install mysql-server-5.5

rootユーザのパスワードを聞かれるが後で設定するので
今回は何も入力しないままOKで進める

rootユーザでDB一覧を表示してみる
mysql -u root
mysql> show databases;

+——————–+
| Database |
+——————–+
| information_schema |
| mysql |
| performance_schema |
| test |
+——————–+

一覧表示できましたね。
ここでrootユーザのパスワードを設定。
mysql> SET PASSWORD FOR root@localhost = PASSWORD(‘新しいパスワード’);

DB一覧表示できたのでいったん終了
mysql> quit

次回は以下のようにすればログインできる
※passwordは先ほど設定した新しいパスワード
mysql -u root/【設定したpassword】
次にユーザの作成
参考はこちら
http://d.hatena.ne.jp/sugarball/20110430/1304111170

ユーザを作成。
mysql> grant select , insert, update ,  delete , drop , create on dbname.* to user1@’%’ identified by ‘password’;

すると出ましたエラー。
ERROR 1045 (28000): Access denied for user ”@’localhost’ (using password: NO)

パスワードが設定されているユーザーを使用して MySQLに接続する際、
パスワードを送信しなかった場合にこのエラーが表示される。
ログインの仕方が悪かったんですね。これで入ればOK
mysql -u root -p
Enter password: 【設定したpassword】

次に先ほど作成したユーザでDB作成
参考はこちら
http://sasuke.main.jp/mysqldatabase.html

次にテーブル作成
参考はこちら
http://sasuke.main.jp/create.html

1テーブルだけ作成して2行insert
macでDB参照できるGUIを探して、参照してみる
今回はSequel Proを選択

スクリーンショット 2012-12-07 12.51.00

次回はSolrについてやっていきます

debianにnginxをインストール

最近急速にシェアを伸ばしているらしいwebサーバ「nginx」をdebianにインストールする。

参考はこちら
Dotdebからnginxをインストール。
今回phpのインストールは除く。
http://hima-j.in/linux/debian-squeeze-nginx-php-fpm-web-server/

今回はすんなりとはいかず…
vi /etc/apt/sources.list
#最後の行に追加
deb http://packages.dotdeb.org stable all
deb-src http://packages.dotdeb.org stable all

の後に aptitude update → エラー発生

1.aptitude update実行でエラーその1
前回のこの通りにホストオンリーアダプタを追加してネットワークの設定を行ったが、
そのままだと以下のエラーが出る。

Err http://http.debian.net squeeze Release.gpg. Could not resolve ‘http.debian.net’…

debianから外に繋がらない模様。
こちらを参考にブリッジ接続に変更。
http://d.hatena.ne.jp/kikupi084/20100622/1277208685

変更後もう一度コマンド実行すると、また今度は違うエラー。

2.aptitude update実行でエラーその2
今度はこんなエラーが。

W: GPG error: http://packages.dotdeb.org stable Release: The following signatures couldn’t be verified because the public key is not available: NO_PUBKEY E9C74FEEA2098A6E

下記URLを参照して解決。
http://inputxoutput.com/sakura-vps-debian-3/

やっと aptitude update 完了。。。

nginxをインストール
aptitude install nginx-full

インストールしたnginxのバージョンを確認
nginx -v
nginx version: nginx/1.2.5

nginx起動して
/etc/init.d/nginx start

ブラウザでトップページ表示

Welcome to nginx!

 

すんなりインストールするだけのはずがそうもいかなかった。。。
つきものですね。
次回はmysqlをインストールします

debianのチューニングとmacからのssh接続

本日はvirtualboxに入れたdebianにログインし、
使いやすいようにチューニングや
必要なもののインストール、
macから仮想環境のdebianにsshで接続するといったことをやっていきます。

■エディタの選択
下記参考通りviを使いたいので「2(vim.tiny)」を選択

※debian6.0.6(Squeeze)だと
1(ed)、2(nano)、3(vim.tiny)ではなく
0(nano),1(nano),2(vim.tiny)から選択。
edがなくなった?

参考はこちら
http://www.linux.net-japan.info/install03.html

■コンソール画面の表示言語変更
debianインストール時に言語を日本にしてしまったためそのままだと文字化けしてしまう。
jfbtermをインストールすれば日本語表示できるようだが、
今回は日本語である必要が特にないのでデフォルトの英語にした。

参考はこちら
http://www.fulldigit.net/content/view/23/19/

■sudoインストール
root権限が必要な際に、いちいちroot権限ユーザになるのが面倒なためインストール。

参考はこちら
http://linux-suomi.net/modules/sinyD0/index.php?id=1

「aptitude install sudo」を実行した後
Please insert the disc labeled 【中略】in the drive ‘/media/cdrom/’ and press[Enter].

と言われる。仮想環境のドライブの設定はどうするんだろうと一瞬戸惑ったが、
下記の手順で解決。
Debianのメニュー→Devices→CD/DVD Devices→イメージファイル選択
※起動時にイメージファイル選択済の状態のままだと
インストール画面が表示されてしまうため用が済んだら外しておく

■virtualboxで入れたdebianにmacからsshで繋ぐ。その1
1.以下のコマンドでdebianにsshをインストール
aptitude install ssh

↑ここまでdebian上の操作↑

↓ここからmac上の操作↓
全てターミナルでコマンド実行

2.以下を参考に進める
http://ginpen.com/2011/02/24/ssh-for-linux-on-virtualbox/

「仮想デバイスの準備」でアダプターを追加する際、
割り当て「ホストオンリーアダプタ」を選択すると
「未選択」以外選択できない。解決方法はこちら
http://b60.uchb.net/linux/2012/02/virtualboxnow.html

これで無事にパスワード認証は完了。

■virtualboxで入れたdebianにmacからsshで繋ぐ。その2
その1でパスワード認証まで行ったが、
ここでは公開鍵認証を行う。

主に参考にしたページはこちら
http://www.tooyama.org/ssh-key.html

さくらVPSにMacでSSH接続する初期設定 も参考になるかも
http://azurite.espel.jp/index.php/2011/04/03/sakuravps-mac-ssh/

こちらも無事完了。

■virtualboxで入れたdebianにmacからsshで繋ぐ。その3
ここではsshのポート変更を行う。

debian(6.0.6)の場合、
「/etc/ssh/sshd_config」の
「Port 22」の「22」を任意の数値に変えて
ssh再起動だけでOK

ポート変更の必要性はこちらを参照。
http://www.takuro.info/archives/264

次回は「nginx」について進めていきます。

macにdebian(linux)をインストール

RAILSの開発の前にインフラのチュートリアルとして

macにlinux(debian)を入れた。

VirtualBoxで仮想環境を作成し、

そこにdebianをインストールという流れ。

イメージを直接読み込むためCD・DVDは不要。

後々debianにmysqlを入れる予定。

1.以下を参考にVirtualBoxをインストール

http://inforati.jp/apple/mac-tips-techniques/windows-hints/how-to-install-virtualbox-and-use-windows-software-in-mac.html

2.以下を参考にdebianを仮想環境にインストール

※一時間程度かかった

http://www.linux.net-japan.info/install02.html

次はdebianにログインし、使いやすいようにチューニングしていきます。