Rubyなどをインストール。Rubyはrbenvで入れた方がいろいろできるが、今回は手軽なyumで。# yum install ruby-devel gcc-c++gemでItamaeなどをインストール。# gem install itamae io-console --no-documentパスワードも生成するならこれも必要# gem install unix-crypt --no-document参考 floatingdays: Itamaeセットアップメモ Itamae自分メモ[1] userとかsshとかportの初期設定
2016年12月25日日曜日
Itamaeセットアップ on CentOS7
2013年7月5日金曜日
Amazon Linuxに Ruby 2.0(+ Rails)をインストールするメモ
- yumで依存するパッケージをインストールする(全部いるのかどうかは分からない)
- “Here is a variant with rbenv.”の方に従って、
- rbenvをインストール
- ruby-buildをインストール
- /etc/profile.d/rbenv.shファイルを作成
- “. /etc/profile”を実行
- Rubyをインストール(必要に応じてバージョンを指定する)
2012年4月17日火曜日
Redmineをインストールための参考サイトのメモ
CentOSにRedmine 1.4 + Passenger(mod_rails)をセットアップする際に参考にしたリンク集のメモ。
- MySQLをインストール
- mysqlとmysql-develをyumで入れる
- libyamlとRubyをインストール
- Install Ruby 1.9.3 with libyaml on CentOS // Collective Idea
- libyamlはyumのだとWarningが消えないので自分でコンパイルした
- Rubyの最新のgzのURLは本家で確認する
- Rails2.xをインストール
- RedmineがまだRails3に対応していないので
- Ruby on Rails: Rails2 系と Rails3 系の環境構築 ~ サーバー起動まで - kosuke-komiya.info/wiki
- 現時点の2系の最新は2.3.14だった(Railsの本家にでも書いといて欲しい...)
- Redmineをインストール
- Redmineのインストール | Redmine.JP
- rmagickはインストールしなかった
- PassengerでRedmineを動かす
- Apache上でRuby on Railsアプリケーションを動かす/Passenger(mod_rails for Apache)の利用 | Redmine.JP
- log/production.logはパーミッション755だと動かなかったので、777にした
- PassengerでRedemineをサブディレクトリに設定する方法
Redmine専用のサーバを用意できて、かつ手間を省きたいならAll in OneインストーラであるALMiniumという選択肢もある → alminium/alminium · GitHub
- 素のCentOSではyumでgitをインストールできないので、RPMForge改めrepoforgeかDAGをyumリポジトリに追加しておくこと。
- ALMiniumはCentOS 5.xにはインストールできない
2011年3月25日金曜日
プログラム言語とフレームワークのオンラインマニュアル29選
Webで公開されている、プログラム言語・フレームワーク・DBのマニュアル(リファレンス)サイトへのリンクをまとめてみた。
選んだ基準は、できるだけ日本語で、なるべく分かりやすいこと。それを満たすなら公式リファレンスより非公式のものを優先している。
- JavaScript
- JavaScript
- jQuery
- jQuery UI
- YUI
- YUI Library (英語、公式)
- HTML、CSS
- PHP
- PHP
- Zend Framework
- PEAR
- Manual :: PEAR Manual (日本語の部分もあるが大部分は英語、またはソースを直読み。公式)
- CakePHP
- マニュアル :: 1.3コレクション (公式)
- Smarty
- Smarty 3:Smarty3 マニュアル | Smarty (公式)
- Smarty 2:Smarty マニュアル | Smarty (公式)
- Ruby
- Ruby
- Ruby on Rails
- Rails 3:Ruby on Rails Documentation (英語、公式)
- Rails 2:Ruby on Rails Documentation (英語、公式)
- Python
- Python
- Python 3:Overview — Python v3.1.3 documentation (英語、公式)
- Python 2:概要 — Python documentation (公式の和訳)
- Django
- Django 1.3:Django | Django documentation | Django documentation (英語、公式)
- Django 1.2:Django | Django documentation | Django documentation (英語、公式)
- Django 1.1:Django | Django documentation | Django documentation (英語、公式)
- Django 1.0:Django ドキュメント — Django v1.0 documentation (公式の和訳)
- Perl
- perldoc.jp (公式の和訳)
- Java
- Objective-C
- MySQL
- MySQL 5.5:MySQL :: MySQL 5.5 Reference Manual (英語、公式)
- MySQL 5.1:MySQL :: MySQL 5.1 リファレンスマニュアル (日本語だが一部は英語、公式)
- PostgreSQL
- PostgreSQL 9.0:PostgreSQL 9.0.3文書 (公式の和訳)
- バージョン別のリンク:PostgreSQL日本語ドキュメント(公式の和訳)
JavaScriptのマニュアルは他にも色々あり、使う人のレベルや用途によってどれが使いやすいかが変わってくると思うが、昔大変参考にさせて頂いた杜甫々版を挙げておいた。
Python、Perl、Objective-Cについては公式/準公式のリンクを書いたが、有志によるマニュアルでもっと良いものがあるのかもしれない。(これらの言語はあまり使わないので知らない。)
2010年6月14日月曜日
システム開発で使うオンラインの日本語マニュアル
- PHP
- PHP: PHP マニュアル - Manual (本家)
- PHP マニュアル - PHP 5.3 日本語マニュアル (見やすい、Googleカスタム検索あり)
- Smarty
- Smarty (本家)
- CakePHP
- マニュアル :: 1.3 Collection :: The Cookbook (本家、バージョンには注意)
- Ruby
- Rubyリファレンスマニュアル (本家)
- 逆引きRuby (こっちの方が使いやすいことが多い気がする)
- MySQL
- MySQL :: MySQL 5.1 リファレンスマニュアル (本家、バージョンには注意)
- 5.4と5.5はまだ日本語は無いみたい
- PostgreSQL
- PostgreSQL 8.4.4文書 (by ユーザー会)
- PostgreSQL 8.4.4文書 (マニュアル検索が便利そう)
- Apache
- Apache HTTP サーバ バージョン 2.2 ドキュメント - Apache HTTP サーバ (本家、Google検索窓あり)
意外とマニュアル内検索が無かったり、あっても検索しづらかったりすることが少なくない。
また、普通にGoogle検索から探そうとすると古いマニュアルばかりヒットすることも(Postgresとか)。
素直に英語のマニュアルで調べればいいんだろうけど...
2010年5月8日土曜日
Cucumberインストールメモ
(やったことを順に書いたので、「正しいインストール方法」としては読み辛い。)
- Rubyインストール
yum install ruby← 1.8.6以降が必要になり、後でソースから入れなおした - Ruby Gemsインストール
yum install rubygems← Rubyを入れなおしたのでこちらもソースから入れなおした - Cucumberインストール
gem install cucumber
最初はずっとcucamberと書いていてエラーにされた
- Webratインストール
gem install webrat
しようとしたらエラーになった。
Building native extensions. This could take a while...
ERROR: Error installing webrat:
ERROR: Failed to build gem native extension.
/usr/bin/ruby extconf.rb install webrat
can't find header files for ruby.
Gem files will remain installed in /usr/lib/ruby/gems/1.8/gems/nokogiri-1.4.1 for inspection.
Results logged to /usr/lib/ruby/gems/1.8/gems/nokogiri-1.4.1/ext/nokogiri/gem_make.out
- 参考になりそうな記事を見つけた → gem で nokogiri, webrat放り込む時にエラーでた on Ubuntu 9.04 - ザ・職人
- libxml2はインストール済みだった
- libxml2-develインストール
yum install libxml2-devel
でもWebratはインストールできなかった
- libxsltはインストール済み
- libxslt-develインストール
yum install libxslt-devel
でもWebratはダメ - もしかしてruby-devel?
yum install ruby-devel
- webrat再チャレンジ
gem install webrat
入った!
- Mechanizeインストール
gem install mechanize
- RSpecも必要?
gem install rspec
インストールされたバージョンは
- Ruby 1.8.5
- Cucumber 0.6.4
- Webrat 0.7.0
- Mechanize 1.0.0
- RSpec 1.3.0
試しに動かしてみたい。
ここが参考になりそう → エンジニアは空を飛ぶ: Cucumber入門(1) 一番最初のCucumber
featureの日本語化についてはここを参考にやってみる → Ruby/cucumber/日本語を使う方法 - TOBY SOFT wiki
ディレクトリ作成
cd /tmp
mkdir cuke
cd cuke
mkdir features
mkdir features/step_definitions
mkdir features/support
環境設定ファイル作成
下記を参考に
vi features/support/env.rb
require 'spec/expectations'
require 'cucumber/formatter/unicode'
# Webrat
require 'webrat'
require 'test/unit/assertions'
World(Test::Unit::Assertions)
Webrat.configure do |config|
config.mode = :mechanize
end
World do
session = Webrat::Session.new
session.extend(Webrat::Methods)
session.extend(Webrat::Matchers)
session
end
featureファイル作成
vi features/test.feature
# language: ja
機能: Cukeのテスト
"Cucumber"をGoogle検索してCucumber関連の検索結果を得る
シナリオ: 同上
前提 "http://www.google.co.jp/"ページを表示している
もし "cucumber"を検索する
ならば "moroの日記"と表示されていること
stepsファイル作成(ためしにGivenだけ)
vi features/step_definitions/test_steps.rb
# -*- encoding: UTF-8 -*-
前提 /^"([^"]+)"ページを表示している$/ do |url|
visit url
end
cucumberエラー発生
前提 "http://www.google.co.jp/"ページを表示している # features/step_definitions/test_steps.rb:3
undefined method `instance_variable_defined?' for #<Net::HTTP www.google.co.jp:80 open=false> (NoMethodError)
(eval):2:in `visit'
./features/step_definitions/test_steps.rb:4:in `/^"([^"]+)"ページを表示している$/'
features/test.feature:6:in `前提 "http://www.google.co.jp/"ページを表示している'
instance_variable_definedはRuby1.8.6以降が必要らしい → rip のインストール - オボロぼろぼろ
Ruby1.8.6以降はyumでは見つからなかったので、ソースからコンパイルする必要があるようだ。
こちらを参考に → マルニカ。 CentOSに最新Rubyをインストール。
Rubyをアンインストール
yum remove rubygemsも一緒にremoveされた。
後は上記サイトのとおりに。
Rubyはなんとなく1.9.1を選んだ。
最新のバージョン番号は下記で確認で。
- RPMforge → DAG: rpmforge-release RPM packages for Red Hat, CentOS and Fedora
- Ruby → ダウンロード
- Gems → RubyForge: RubyGems: Project Info
またひととおりCucumberからインストールし直しだ...
(Gemでインストールし直す。)
インストールされたバージョンは
- Ruby 1.9.1
- Cucumber 0.6.4
- Webrat 0.7.0
- Mechanize 1.0.0
- RSpec 1.3.0
再チャレンジ
cucumber
3 steps (2 undefined, 1 passed)「前提」が通った!
steps内の記述については下記が参考になりそう。
- Cucumber+WebratでPHPアプリのテストをする | CAPH TECH(古い書き方?)
- Cucumber + Webrat CheatSheet « Rails Playground
- : Webrat::Matchers [brynary-webrat]
日本語でStepsを定義する際には書き方をmoro-misoに合わせておいた方が後々幸せになれるかも。
また、Cucumberの問題ではないが、CentOS 5.4でもprelinkはRuby-1.9.1のバイナリを破壊する、かも | Selfkleptomaniacという問題が発生したので、ここに書いてある対応をした。
2010年3月14日日曜日
2009年11月6日金曜日
Rails 2.xで XMLサイトマップを生成する方法
Rails2.3で試した。
必要最低限の要素のみ。
config/routes.rb
map.connect "sitemap.xml", :controller => :test, :action => :sitemap
controllers/test_controller.rb
class TestController < ApplicationController
def sitemap
# サイトマップとして送信したいページのURL生成に必要な情報を取得する
@members = Member.find(:all)
@entries = Entry.find(:all)
headers["Content-Type"] = "text/xml; charset=utf-8"
respond_to do |format|
format.xml {render :layout => false}
end
end
end
views/test/sitemap.xml.builder
xml.instruct!「http://」から始まるフルなURLにするために「:only_path => false」を付けている。
xml.urlset(:xmlns => "http://www.sitemaps.org/schemas/sitemap/0.9") do
# トップページ
xml.url do
xml.loc(url_for(:controller => :top, :only_path => false))
end
# 個別のページ
@members.each do |member|
xml.url do
xml.loc(url_for(:controller => :members, :action => :show, :id => member.id, :only_path => false))
end
end
・
・
・
end
状況によってはキャッシュさせた方が良いだろう。
検索エンジンへの通知はrobots.txt等で。(Google Webマスターツールとか使った方が安心感があるけど。)
robots.txt
# See http://www.robotstxt.org/wc/norobots.html for documentation on how to use the robots.txt file
#
# To ban all spiders from the entire site uncomment the next two lines:
# User-Agent: *
# Disallow: /
Sitemap: http://www.example.com/sitemap.xml
参考:
「はじめてのRuby on Rails2」著者サポートページ
Rails2.0でGoogleサイトマップとかのsitemap.xml作る - ひげろぐ
sitemaps.org - プロトコル
2009年9月24日木曜日
Rails ActiveRecord::Validationsのエラーメッセージを多国語対応するメモ
RailsでActiveRecordのValidationによって生成されるエラーメッセージを翻訳するためのメモ。
方法その1:I18nを使う
所定のYAMLに翻訳部分を記述しておく方法。現在はこれが一番スマートなようだ。
(フィールド名とその後のメッセージの間に半角スペースが入ってしまう?)
参考:
Rails 2.2.2でエラーメッセージを日本語化する。|WEBデザイン Tips
Rails 2.2 の ActiveRecord::Validations#add のソースコードを読む - Ruby on Rails 研究 - Ruby on Rails with OIAX
方法その2:GetTextを使う
ActiveRecord::Errorsのdefault_error_messagesをゴリゴリ書き換える方法。
例えば、基本となるModelを作ってその中でメッセージをセットし、他のモデルはそれを継承する方法でもよいと思う。
class BaseModel < ActiveRecord::Baseただし最新のRailsではDeprecation::warnの対象?
ActiveRecord::Errors.default_error_messages[:invalid] = _("がおかしいよ!")
ActiveRecord::Errors.default_error_messages[:empty] = _("を入力してね!")
・
・
end
個々のエラー内容の前に出てくる文(デフォルトでは「<n> errors prohibited this object from being saved」と「There were problems with the following fields:」)は、Module: ActionView::Helpers::ActiveRecordHelperにあるとおり、:header_messageと:messageを指定することにより変えられる。
(2009/10/14追記:Ruby on RailsでRuby-GetText-Packageを使う (Rails-2.3.2以降) - よたらぼ 保管庫に書いてある、「エラーメッセージのタイトル部分をカスタマイズ」のやり方なら、個々のformごとに:header_messageと:messageを指定しなくてすむようだ。)
参考:
エラーメッセージからフィールド名を取り除く
ActiveRecord::Errorsあたりのローカライズ - ハードコアシステム開発
validationのエラーメッセージ(error_messages_for)の日本語化 - Slow Dance
(2009/10/14追加:最新のRails/GetTextについての説明になっていた)
Ruby on RailsでRuby-GetText-Packageを使う (Rails-2.3.2以降) - よたらぼ 保管庫
tags: active-record, gettext, i18n, rails, ruby, validation 0 コメント
Railsで Viewの partialにデータを渡す方法
RailsのViewで部分テンプレートであるpartialを呼び出す場合、呼び出し時に :object または :collection と :locals を渡すことができる。
<%= render :partial => "msg", :object => "データ", :locals => {:name => "他のデータ"} %>
:collection の場合は複数のデータのそれぞれに対して1回ずつpartialが実行される。
<%= render :partial => "msg", :collection => ["データ1", "データ2"] %>
partial側では :object と :collection で渡されたデータは、partialの名前と同じ名前の変数に入っている。
#_msg.html.erb
<%= msg %> <= ここにデータが入っている
<%= name %> <= :localsで渡したデータは指定した名前の変数に入っている。
参考:
UK STUDIO - Railsのpartialの使い方
Ruby On Rails ピチカート街道 - partial パーシャルな関係【partial と object】 -
render :partialカウンター、オブジェクト - ザリガニが見ていた...。
2009年8月28日金曜日
Railsでタグクラウド
いくつかプラグインがあるが、acts_as_taggable_on_steroidsが一番人気のようだ。
acts_as_taggable_on_steroidsの使い方は、acts_as_taggable_on_steroidsの使い方まとめ - ひげろぐが参考になる。
acts_as_taggable_on_steroidsのインストール元については、Railsのtagプラグイン「acts_as_taggable_on_steroids」がgithubに行ってた - 常識という迷信にあるとおり、現在はgithubにあるのが最新のようだ。
上記の参考サイトではacts_as_taggable_on_steroidsの機能をフルに使っているが、タグクラウドを表示したいだけなら下記だけでOK。
- acts_as_taggable_on_steroidsをインストール
- タグのモデルを用意する(既存のモデルでもcountと表示用の文字列(下記の例ではlabel)さえあればOK)
# tag_sample.rb
class TagSample
attr_accessor :count, :label
end - 上記のモデルにデータをセットした配列を用意
# FooController.rb
# 実際にはDBから取得したデータとかをループで処理するだろうけど
tag1 = TagSample.new
tag1.count = 10
tag1.label = "ラベル1"
tag2 = TagSample.new
tag2.count = 20
tag2.label = "ラベル2"
@tags = [tag1, tag2] - ヘルパーでTagsHelperをインクルードする
# foo_helper.rb
module FooHelper
include TagsHelper
end - ビューでタグクラウドを表示(第2引数のCSSクラスの数は増減OK)
<!-- foo/bar.html.erb -->
<% tag_cloud(@tags, ["tag-s", "tag-m", "tag-l"]) do |tag, css| %>
<%= link_to(h(tag.label), {:action=> :tags, :id => tag.label}, :class => css) %>
<% end %> - CSSで見た目を調整
a.tag-s { font-size: 80%; }
a.tag-l { font-size: 150%; }
Railsで View内で head要素にCSS等を追加する方法
Railsで特定のページだけにCSSファイルを追加する方法を見て知った。これは便利。
application.html.erb等で、 yieldにパラメータを指定すればOK。
<html>
<head>
<title>テスト</title>
<%= yield :head %>
</head>
<body>
<%= yield %>
<%= yield :foot %>
</body>
</html>
Viewの方ではcontent_forに同じパラメータを指定してブロック内に書く。
<h1>head and foot</h1>
<% content_for :head do %>
<%= stylesheet_link_tag "foo" %>
<% end %>
<% content_for :foot do %>
<%= javascript_include_tag "bar" %>
<% end %>
こんな感じのHTMLになる。
<html>
<head>
<title>テスト</title>
<link href="/stylesheets/foo.css?1345990170" media="screen" rel="stylesheet" type="text/css" />
</head>
<body>
<h1>head and foot</h1>
<script src="/javascripts/bar.js?1350833305" type="text/javascript"></script>
</body>
</html>
これを使えばCSSはhead内に、JavaScriptはbody要素の最後に入れられる。
tags: css, javascript, rails, ruby 0 コメント
Railsの日付選択ヘルパー (select_date)
Rails2.3で日付選択ヘルパー(select_date)を使うためのメモ。
オプションとして指定できるものはこんな感じのようだ。
<%
options = {
:prefix => 'payday', # field名のprefix
:order => [:month, :year, :day], # 表示順
:date_separator => '/', # 項目間の区切り
:prompt => true, # 選択リストの一番上の表示について。個別の指定も可
:include_blank => true, # 選択リストの一番上のブランクにする
:use_month_numbers => true, # 月を数字で表す
# 選択可能な年の範囲を指定
:start_year => Date.today.year,
:end_year => Date.today.year + 1,
# 非表示にする
:discard_year => true,
:discard_month => true,
:discard_day => true
}
html_options = {} # ?
%>
<%= select_date(Date.today + 2.days, options, html_options) %>
また、Rails2.2にはバグがあるらしい → エラー回避 date_select -- can't convert Symbol into String - 税理士業界でSaaS開発をしながら綴る日記
select_dateとdate_selectは似てるけど別モノらしい。
年月日を個々に作る場合、「select_year, select_month, select_day」が使えるが、「year_select, month_select, day_select」は無い。
参考:
Module: ActionView::Helpers::DateHelper (本家リファレンス)
変なヤバいもんログ » Railsで忘れそうなHelperメソッドメモ
いきなりはまった。select_date - 印刷屋のdeveloper日記
Railsプラグイン ActiveForm調査メモ
AtcitveFormはテーブルに紐付かないモデルを使って入力フォームを作るためのプラグイン。
データの入れ物とvalidationを担う。
「ActiveForm」という名前のプラグインは複数あるので注意。
Gemでインストールすると、module版のActiveFormがインストールされるが、よく分からなかったのでパス。
どうやら「RealityForge」で公開されたActiveFormが主流のようだ。
最新版?:
maciej's active_form at master - GitHub
使い方:
RailsのActiveFormの使い方 - 京の路
Ruby on Rails プラグイン まとめ wiki - active_formプラグイン
るびすけの開発日記 ~Ruby on Rails~ - IT業界のための転職サイト -
Rails2.2以降ではエラーが発生する。
undefined method `self_and_descendants_from_active_record' for Xxx:Class
rails2.2でactive_formを導入するときにはまった - オレワカ。を参考に、「self_and_descendants_from_active_record」を追加すると解消した。
svnから持ってくるバージョンでは 「self_and_descendents_from_active_record」 すらも無いので注意。
使用例
#コントローラ
class SearchController < ApplicationController
def index
@search = Search.new(params[:search])
if params[:search]
@search.valid?
end
end
end
#モデル
require 'active_form'
class Search < ActiveForm
attr_accessor :tag
validates_presence_of :tag
validates_length_of :tag, :maximum => 3
def validate
# カスタム入力チェックはここで
end
end
<!-- ビュー -->
<% form_for(:search, @search) do |f| %>
<%= error_messages_for :search, "tag" %>
<%= f.text_field "tag" %>
<% end %>
2009年8月12日水曜日
Railsの GetText 2.0でサーバが起動しないエラーの対応メモ
レアなケースだろうけど一応メモ。
(参考:RailsでGetText)
Rails のためのものぐさな Web アプリケーションの国際化手法 - 川o・-・)<2nd lifeが参考になる。
ただしGetText 2.0からはenvironment.rbで読み込むgemが変わったので注意。
config.gem "locale_rails"
config.gem "gettext_activerecord"
config.gem "gettext_rails"
ActiveRecordもActionMailerも使わないので、config/environment.rbで不使用にしていた。
config.frameworks -= [ :active_record, :action_mailer ]
gettext(2.0)を使うために、下記をgemでインストール。
localeActiveRecordは使わないのでgettext_activerecordは入れなかった。
locale_rails
gettext
gettext_rails
アプリケーションにgettextを使う設定を入れて、mongrelを起動しようとしたがエラーになって起動できない。
ruby server/script
↓
.../lib/active_support/core_ext/module/aliasing.rb:33:in `alias_method': undefined method `create!' for class `ActionMailer::Base' (NameError)
ActionMailer?使ってないけど?
しょうがないから不使用指定を外す。
config.frameworks -= [ :active_record, :action_mailer ]
↓
config.frameworks -= [ :active_record ]
これでも駄目。
試しにgettext_activerecordをインストール。
これで起動したら起動できた。
もう1つ試しにgettext_activerecordのrequireをコメントアウトしたら起動しなかった。
結論:RailsでGetTextを使う場合、不要でもActionMailerを外しては駄目。かつ、不使用でもgettext_activerecordが必要。
ActiveResourceを使っている Controllerを RSpecでテストする例
参照系しか試してない。
下記の例では、MemberというActiveResourceをリスト表示したり詳細表示したりするControllerについて、RSpecでテストする。
(参考:ActiveResource の使い方(前編) : Rails 同士で通信する - WebOS Goodies ※「ユニットテスト」の項。RSpecではないけど。)
require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
require 'active_resource/http_mock'
describe MembersController do
before do
@member = {:id => 1, :name => 'foo'}
@members = [@member]
@header = Member.connection.__send__(:build_request_headers, {}, :get)
ActiveResource::HttpMock.respond_to do |mock|
mock.get '/members.xml', @header, @members.to_xml(:root => 'members')
mock.get '/members/1.xml', @header, @member.to_xml(:root => 'member')
end
end
#後は普通にケースを書く
#(略)
end
要するに、http_mockをrequireしておき、before()でモックが返すXMLを定義している。
ActiveResourceで取得する際にパラメータ付きのURLを使う場合、「mock.get」のところにもパラメータを付けなければいけないので注意。
例:
mock.get '/members.xml?q=keyword', @header, @members.to_xml(:root => 'members')
...と、ここまで書いてから、mockを使ってテストできることを知った。
before doActiveResourceでもActiveRecordでもModelであることには違いがないから、ただMockを使えば良いだけだった。
@member = mock_model(Member)
Member.should_receive(:find).with(:all).and_return(@member)
get 'index'
end
HttpMockはむしろ、ActiveResource::Baseを継承したModelのテストのために使うのか。
RSpecの規約を覚えるためのリンク集とメモ
RSpecはDSLなので、決め事を覚えないと使いこなせない。
よく使うことになるであろう、参考リンクを列挙しておく。
前処理、後処理
- xUnitでおなじみのsetUp()、tearDown()ではなく、before、afterを使う
- before、afterは複数定義できる
- 参考:before / after メソッド # Rubyist Magazine - スはスペックのス 【第 1 回】 RSpec の概要と、RSpec on Rails (モデル編)
aeertion(expectation)
- テストに成功したかどうかは、「xxx.should xxx」または「xxx.should_not xxx」という文で判定する
- should(またはshould_not)の後ろに付けるの(matcherという)は、演算子(「== 123」とか)の他、予め用意されたmatcherが使える
- 参考:
change matcher
- 処理前と処理後の値を変化をテストするために、change matcherというものが用意されている
- 参考:change マッチャ # Rubyist Magazine - スはスペックのス 【第 1 回】 RSpec の概要と、RSpec on Rails (モデル編)
Controllerのテスト
- HTTP Response Codeのテストに使うmatcher
- 200 OKのテスト → be_success
- 300系のテスト → be_redirect
- その他 → 用意されていないようだ
- ControllerがどのViewを使うか(テンプレートの選択)のテストには、render_template()というmatcherを使う
#例
response.should render_template('members/index') - 参考:
Viewのテスト
- 参考:
Mock(mock_model)
- MockはModelのモックとして使い、かつ、そのモックのメソッドが想定どおり呼び出されたかをテストできる
- モックからの戻り値をテスト内で使わない場合、and_return()は省略できる
- テストはせずにスタブとして使うこともできる
- mock_modelを使う場合、idは生成時に指定しないと内部的に勝手に作ってしまうので注意
#例
member = mock_model(Member)
member.stub!(:id).and_return(100)
member.id.should == 100 # => これはOK(Green)だが...
#Viewで「link_to('link', member)」している部分をテスト
response.should have_tag('a[href=?]', '/members/100') # => これはNG(Red)になる
#調べてみると、内部的なIDが使われたようで、「/members/1001」というパスになっていた
上記の例は、下記のようにmock_model生成時にidも指定すれば問題は起きないmember = mock_model(Member, :id => 100)
- 参考:
参考:
RSpec をもっと理解したかったので、まとめを作りました - takihiroの日記
RSpec.info: Writing
Index of /rspec (公式?仕様書)
RSpec on Railsのセットアップ
やったことのメモ。
インストール
gemでRSpecをインストール(もしかして不要?)
gem install rspec
RSpec-Railsもインストール(「ruby script/plugin install http://...」でインストールした方がいい?)
gem install rspec-rails(rspec_railsだと見つからない)
generateする(とりあえずMemberモデルを対象に。)
ruby script/generate rspec
ruby script/generate rspec_model Member
なにはともあれ実行してみる
ruby script/spec spec/models/member_spec.rbまたは
rake spec:modelsなどなど。(参考:RSpec on Rails でインストールされる rake タスク)
ActiveRecordを使わない場合
そのままでは下記のようなエラーになる。
.../spec/spec_helper.rb:16: undefined method `use_transactional_fixtures=' for #<Spec::Runner::Configuration:0x1234567> (NoMethodError)上記のソース(spec/spec_helper.rb)にはこう書いてある。
# If you're not using ActiveRecord you should remove these書いてあるとおり、この3行を削除したら無事動いた。
# lines, delete config/database.yml and disable :active_record
# in your config/boot.rb
config.use_transactional_fixtures = true
config.use_instantiated_fixtures = false
config.fixture_path = RAILS_ROOT + '/spec/fixtures/'
参考:
Rubyist Magazine - スはスペックのス 【第 1 回】 RSpec の概要と、RSpec on Rails (モデル編)
Rubyist Magazine - スはスペックのス 【第 2 回】 RSpec on Rails (コントローラとビュー編) (続きは...?)
RSpec on Railsを試してみた。 - ひげろぐ
Rubyの ActiveResource調査メモ
基本:
ActiveResourceでいろんなAPIを叩いてみる。標的はHotpepper API - 富士山は世界遺産
発行されるURLと拡張子について:
天使やカイザーと呼ばれて: ActiveResourceで拡張子なしのURIを発行する方法
応用編:
ActiveResource の使い方(前編) : Rails 同士で通信する - WebOS Goodies
ActiveResource の使い方(中編) : メソッドの詳細 - WebOS Goodies
(後編は? 2009/09/17追記:公開された↓)
ActiveResource の使い方(後編) : 一般の Web API にアクセスする - WebOS Goodies
ActiveResourceのバグ?
[PATCH] ActiveResource find(:all) method returns "NoMethodError: undefined method `collect!'... - lambda {|diary| lambda { diary.succ! } }.call(hatena)
取得するXMLがn件のデータを包含する要素を持つ形の場合、包含する要素に属性type="array"が無いと「collect!メソッドが無いよ!」というエラーが発生する問題。
たとえばこれだとエラーになる。(n件のmemberを、membersという要素で包含している。)
<?xml version="1.0" encoding="UTF-8"?>
<menbers>
<member>
<id>1</id>
<id>name</id>
</member>
</menbers>
type="array"を付ければエラーにならない。
<?xml version="1.0" encoding="UTF-8"?>
<menbers type="array">
<member>
<id>1</id>
<id>name</id>
</member>
</menbers>
Rubyの ActiveRecordについてのメモ
しばらく離れていたらすっかり忘れてる。
調査したことのメモ。
微妙に仕様変わってる。
基礎:ActiveRecordを使ってみる « UK STUDIO
検索して見つからない場合の戻り値:ActiveRecord find時の戻り - 忘れやすいのでメモ - Yahoo!ブログ
(検索方法によってnilだったり空の配列だったり、例外が投げられたり)
find_first()とfind_all()は無くなった:同じくActiveRecord find時の戻り - 忘れやすいのでメモ - Yahoo!ブログ
最大値等のSQLでいう集約関数:RDBMSの集約関数の結果をActiveRecordで取得する方法 - 森薫の日記
ランダムに1件取り出す:
そんな悲しい目をしないで » Blog Archive » Rails ActiveRecord でランダムにレコードを取得する方法
Mysql で、ランダムにレコードを取り出す方法 - kaeruspoon
(RAND()を使う方法は行数と同じだけRNAD()を実行するわけだから、行数が多い場合はしんどそう)
find_by_xxx()とfind_all_by_xxxについて:ActiveRecordで検索-find_by_* - うなの日記
tags: active-record, db, rails, ruby 0 コメント
tags
- php (176)
- javascript (82)
- apache (54)
- windows (53)
- google (47)
- mysql (41)
- linux (39)
- security (39)
- css (38)
- network (37)
- api (36)
- web (35)
- ruby (34)
- install (31)
- mobile (31)
- firefox (30)
- html (27)
- ie (27)
- config (26)
- postgres (26)
- image (25)
- library (25)
- search (25)
- mail (23)
- db (22)
- feed (22)
- rails (22)
- amazon (19)
- cakephp (19)
- map (19)
- tool (19)
- url (19)
- video (19)
- service (18)
- ec2 (17)
- encoding (17)
- error (17)
- jquery (17)
- server (17)
- flash (16)
- hatena (16)
- setting (16)
- chrome (15)
- blogger (14)
- java (14)
- android (13)
- yahoo (13)
- yui (13)
- del.icio.us (12)
- extensions (12)
- http (12)
- sql (12)
- aws (11)
- compare (11)
- framework (11)
- microsoft (10)
- centos (9)
- date (9)
- free (9)
- google-maps (9)
- php5.3 (9)
- rss (9)
- safari (9)
- yum (9)
- https (8)
- office (8)
- python (8)
- smart-phone (8)
- trouble (8)
- version-up (8)
- web-browser (8)
- adsense (7)
- calendar (7)
- cdn (7)
- jquery-ui (7)
- rakuten (7)
- twitter (7)
- android-apps (6)
- backup (6)
- command (6)
- gmail (6)
- google-app-engine (6)
- pear (6)
- reference (6)
- test (6)
- tuning (6)
- ui (6)
- validation (6)
- xmail (6)
- xml (6)
- zip (6)
- amazon-linux (5)
- atom (5)
- excel (5)
- gem (5)
- ip-adress (5)
- opera (5)
- systemdesign (5)
- titanium (5)
- array (4)
- bookmarklet (4)
- bootstrap (4)
- cache (4)
- color (4)
- cron (4)
- crypt (4)
- customize-google (4)
- feedcreator (4)
- flickr (4)
- font (4)
- form (4)
- function (4)
- gettext (4)
- google-analytics (4)
- google-code (4)
- greasemonkey (4)
- helper (4)
- html5 (4)
- iphone (4)
- jquery-mobile (4)
- laravel (4)
- mac (4)
- password (4)
- perl (4)
- regexp (4)
- rspec (4)
- sbm (4)
- sitemaps (4)
- subversion (4)
- template (4)
- tls (4)
- trac (4)
- utf-8 (4)
- version (4)
- web-service (4)
- active-record (3)
- analytics (3)
- au (3)
- cloud (3)
- date-picker (3)
- dns (3)
- docomo (3)
- domain (3)
- firewall (3)
- ftp (3)
- git (3)
- google-calendar (3)
- google-docs (3)
- hardware (3)
- hatena-bookmark (3)
- hosting (3)
- i18n (3)
- ie8 (3)
- itamae (3)
- json (3)
- log (3)
- openssl (3)
- pdo (3)
- photo (3)
- png (3)
- post (3)
- postgis (3)
- price (3)
- prototype.js (3)
- s3 (3)
- selinux (3)
- seo (3)
- shift-jis (3)
- smarty (3)
- ssh (3)
- ssl (3)
- strage (3)
- string (3)
- tab (3)
- tortoise-git (3)
- url-shortener (3)
- user-agent (3)
- windows-update (3)
- xhtml (3)
- zend-framework (3)
- about-config (2)
- active-resource (2)
- aide (2)
- android-studio (2)
- anti-virus (2)
- auth (2)
- bing (2)
- bitly (2)
- blog (2)
- books (2)
- bootstrap-cdn (2)
- bot (2)
- browser (2)
- bug (2)
- capture (2)
- cdnjs (2)
- centos7 (2)
- cert (2)
- certbot (2)
- class (2)
- convert (2)
- cookie (2)
- csv (2)
- datetime (2)
- debug (2)
- django (2)
- dojo (2)
- download (2)
- dropbox (2)
- ebs (2)
- eclipse (2)
- editor (2)
- feedly (2)
- google-reader (2)
- google-search (2)
- grids (2)
- hash (2)
- highslide (2)
- ipad (2)
- japanese (2)
- jpeg (2)
- language (2)
- lets-encrypt (2)
- link (2)
- mcrypt (2)
- memory (2)
- mod-security (2)
- moible (2)
- mouse (2)
- music (2)
- node-js (2)
- oauth (2)
- paas (2)
- pdf (2)
- permission (2)
- pocket (2)
- rds (2)
- referer (2)
- rest (2)
- rewrite (2)
- rfc (2)
- sample (2)
- scraping (2)
- session (2)
- simplexml (2)
- sjis (2)
- smtp (2)
- snoopy (2)
- softbank (2)
- tag-cloud (2)
- task (2)
- tips (2)
- todo (2)
- tomcat (2)
- travel (2)
- update (2)
- upload (2)
- v8 (2)
- v8cgi (2)
- vmware (2)
- vue-js (2)
- webBrowser (2)
- wordpress (2)
- youtube (2)
- ab (1)
- actionscript (1)
- addon (1)
- adminer (1)
- aes (1)
- affiliate (1)
- ajax (1)
- analyze (1)
- android-market (1)
- apple (1)
- aurora (1)
- avast (1)
- bake (1)
- behavior (1)
- blowfish (1)
- bookmarks (1)
- bootswatch (1)
- bread-crumb (1)
- button (1)
- c (1)
- cakphp (1)
- camel-case (1)
- casio (1)
- chalice (1)
- circle-ci (1)
- clam-av (1)
- cloudformation (1)
- cloudfrare (1)
- cloudn (1)
- cloudwatch (1)
- cman (1)
- codec (1)
- codeigniter (1)
- counter (1)
- crawler (1)
- cucumber (1)
- dao (1)
- database (1)
- datastore (1)
- delete (1)
- dena (1)
- deploy (1)
- deprecated (1)
- design (1)
- django2 (1)
- dokuwiki (1)
- dump (1)
- ecoder (1)
- emacs (1)
- encrypt (1)
- english (1)
- erd (1)
- ethna (1)
- exception (1)
- f-route (1)
- file (1)
- filter (1)
- firebug (1)
- float (1)
- flv (1)
- font-awesome (1)
- font-family (1)
- fontawesome (1)
- format (1)
- formula (1)
- fulephp (1)
- gd (1)
- gdmail (1)
- gears (1)
- geo (1)
- geo-coding (1)
- geolocation-api (1)
- get (1)
- gis (1)
- github (1)
- go-lang (1)
- golang (1)
- goo (1)
- google-apps (1)
- google-checkout (1)
- google-labs (1)
- google-libraries-api (1)
- google-play (1)
- google-plus (1)
- google-trends (1)
- gpl (1)
- gps (1)
- gradle (1)
- grep (1)
- grid.css (1)
- grids.css (1)
- group-ware (1)
- hmac (1)
- hotel (1)
- html-escape (1)
- htmlsql (1)
- http-status (1)
- httpd (1)
- iaas (1)
- ids (1)
- ie6 (1)
- iftt (1)
- igoogle (1)
- iis (1)
- import (1)
- include (1)
- index (1)
- infra (1)
- innodb (1)
- insert (1)
- integer (1)
- ios (1)
- ipad-mini (1)
- ipod (1)
- itunes (1)
- j-phone (1)
- japan (1)
- jetty (1)
- jmeter (1)
- jruby (1)
- jsdelivr (1)
- kohana (1)
- labs (1)
- lambda (1)
- lamp (1)
- layout (1)
- lift (1)
- livedoor (1)
- load-balance (1)
- locale (1)
- logo (1)
- logwatch (1)
- lsync (1)
- magic-method (1)
- maintenance (1)
- math (1)
- maven (1)
- mbstring (1)
- md5 (1)
- menu (1)
- merb (1)
- migration (1)
- mime-type (1)
- minify (1)
- mock (1)
- mod-pagespeed (1)
- mod_cache (1)
- modernizr (1)
- module (1)
- monit (1)
- mootools (1)
- myisam (1)
- myrt-mobile (1)
- mysqldump (1)
- nec (1)
- neta (1)
- nginx (1)
- normalize (1)
- null (1)
- objective-c (1)
- on2 (1)
- onload (1)
- oo (1)
- openid (1)
- or-mapper (1)
- passenger (1)
- pc (1)
- pecl (1)
- photoshop (1)
- phpexcel (1)
- phpmailer (1)
- pipes (1)
- plugin (1)
- podcast (1)
- poderosa (1)
- port (1)
- postal (1)
- postfix (1)
- powerset (1)
- print (1)
- pure (1)
- python3 (1)
- qdmail (1)
- qr-code (1)
- query-string (1)
- quota (1)
- radio (1)
- rating (1)
- rbenv (1)
- reader (1)
- realtime-search (1)
- redhat (1)
- redmine (1)
- remi (1)
- replace (1)
- replication (1)
- request (1)
- require (1)
- reserve (1)
- reset (1)
- restore (1)
- return (1)
- reverse-proxy (1)
- rgb (1)
- rijndael (1)
- rkhunter (1)
- robots.txt (1)
- rootkit (1)
- round (1)
- rpm (1)
- rpmforge (1)
- rt (1)
- saas (1)
- safri (1)
- samba (1)
- scala (1)
- schedule (1)
- screen-shot (1)
- script.aculo.us (1)
- search-wiki (1)
- seasar (1)
- serverless (1)
- sever-side (1)
- sha-2 (1)
- sha-256 (1)
- sha-512 (1)
- share (1)
- shell (1)
- shopping (1)
- simpletest (1)
- simulator (1)
- sinatra (1)
- skype (1)
- sns (1)
- sort (1)
- sqlite (1)
- struts (1)
- sum (1)
- symantec (1)
- symfony (1)
- table (1)
- tag (1)
- tiips (1)
- timezone (1)
- title (1)
- toolbar (1)
- topic-path (1)
- tripwire (1)
- twango (1)
- uninstall (1)
- unit-test (1)
- url-encode (1)
- user-script (1)
- vacuum (1)
- virtual (1)
- voderfone (1)
- web-flavor (1)
- web-fonts (1)
- webdav (1)
- widjet (1)
- willcom (1)
- windows-10 (1)
- windows-7 (1)
- word (1)
- xen (1)
- xinetd (1)
- xmlrpc (1)
- xpath (1)
- xss (1)
- yaml (1)
- yii (1)
- zend (1)