Hatena::ブログ(Diary)

日々是笑心 このページをアンテナに追加 RSSフィード

2013-04-05

Ruby & Rails 関連サイト

| 09:47 | Ruby & Rails 関連サイト - 日々是笑心 を含むブックマーク Ruby & Rails 関連サイト - 日々是笑心 のブックマークコメント

ちょっと小ネタを拾いたいときとか、RubyRails で使えるプラグインを探したいとき、どこを探せばいいんだっけ?って良くなってる。 使ってないと忘れるちゃうんで、備忘録としてメモっとこ。:-)

Ruby 公式サイト

本家サイト。日本語だから情報も拾いやすい。


Ruby on Rails 公式サイト

Rails 情報を拾うなら、まずここを見よう。

RubyGems.org

リリースされてるバージョンを確認できる。gem ファイルのダウンロードもできる。

RVM

RVM の使い方が分かる。インストールとか環境設定で迷ったらここを見るべし。:-)

Ruby Toolbox

利用頻度に合わせてレーティングされてる。どうせ使うなら利用頻度の高いものを使った方が良いよね。 :-)


Rails Casts

Snippet 満載。勉強になる。

2011-05-07

gem で pg をインストール

| 15:53 | gem で pg をインストール - 日々是笑心 を含むブックマーク gem で pg をインストール - 日々是笑心 のブックマークコメント

Windows 環境のころは PostgreSQLドライバとして使ってた pg 。とりあえず、昔にお試し作りしたのを動かしてみようと rvm で 1.8.6 にスイッチしてインストールしてみたら ruby 1.8.7 以降での対応になってた。まぁ、仕方ないよね。

$ gem install pg

ERROR: Error installing pg:

pg requires Ruby version >= 1.8.7.


http://rubygems.org:RubyGems.org を見ると最新の pg は 0.11.0 。0.10.0 から ruby 1.8.7 になってるっぽい。

気を取り直して 0.9.0 を実行 ... してみたら失敗 orz。なんで?

$ gem install pg -v 0.9.0

Building native extensions. This could take a while...

ERROR: Error installing pg:

ERROR: Failed to build gem native extension.

...

checking for pg_config... no

=========== WARNING ===========

You are building this extension on OS X without setting the

ARCHFLAGS environment variable, and pg_config wasn't found in

your PATH. If you are seeing this message, that means that the

build will probably fail.

If it does, you can correct this by either including the path

to 'pg_config' in your PATH or setting the environment variable

ARCHFLAGS to '-arch <arch>' before building.

For example:

(in bash) $ export PATH=/opt/local/lib/postgresql84/bin:$PATH

$ export ARCHFLAGS='-arch x86_64'

...


pg_config が PATH に見つからないって。確かに入れてない。

$ export PATH=/opt/local/lib/postgresql83/bin:$PATH

$ pg install pg -v 0.9.0

おし、今度こそ OK :-)

postgres アカウントでハマった

| 12:33 | postgres アカウントでハマった - 日々是笑心 を含むブックマーク postgres アカウントでハマった - 日々是笑心 のブックマークコメント

pgAdmin も入れたし、さて起動 ... ってデータベースが見つからない? PostgreSQL をずっと Windows でしか使ってなかったし、会社の Macdmg で入れたから忘れてたけど、MacPorts で入れたなら自分でデータベースインスタンスを作って起動させなきゃだね。基本を忘れてる。ダメダメだなー。 ^^;)>

データベースインスタンスの作り方

気を取り直してデータベースインスタンスを作りましょ。port で入れたときのメッセージが参考になるよ。こんな感じ。

$ sudo mkdir -p /opt/local/var/db/postgresql83/defaultdb

$ sudo chown postgres:postgres /opt/local/var/db/postgresql83/defaultdb

$ sudo su postgres -c '/opt/local/lib/postgresql83/bin/initdb -D /opt/local/var/db/postgresql83/defaultdb'


プロセス起動はこんな感じ。お好きな方でどうぞ ... ということらしい。

$ /opt/local/lib/postgresql83/bin/postgres -D /opt/local/var/db/postgresql83/defaultdb

or

$ /opt/local/lib/postgresql83/bin/pg_ctl -D /opt/local/var/db/postgresql83/defaultdb -l logfile start

postgres アカウント? HOME?

chown を実行したとき、いつの間に postgres アカウント作ったんだろ?と思ってたけど、前に dmgPostgreSQL を入れたときのアカウントが残ってたっぽい。su で postgres になって HOME を見たら /Library/PostgreSQL/8.3 になってるし。うれしくないなぁ。 :-(

$ su postgres

$ pwd

/opt/local/var/db/postgresql83

$ cd

bash: cd: /Library/PostgreSQL/8.3: No such file or directory

$ env | grep HOME

HOME=/Library/PostgreSQL/8.3


postgres の HOME 変更

defaultdb までのパスをバージョン前で区切っておいて postgres の HOME を /opt/local/var/db/postgresql にするで良いかな。

ということでディレクトリはこんな感じ。バージョン違いで管理できるようにしとく。

/opt/local/var/db/postgresql/83/defaultdb

/opt/local/var/db/postgresql/84/defaultdb

/opt/local/var/db/postgresql/91/defaultdb

postgres アカウントの所在?

問題は postgres の HOME 変更。[システム環境設定 > アカウント] にもいないし /etc/passwd にもいない。でもMac OS X で PostgreSQL を使ってみよう (3) を参考に dscl を叩くと postgres ユーザ情報が表示される。

$ dscl . -read /Users/postgres

AppleMetaNodeLocation: /Local/Default

NFSHomeDirectory: /Library/PostgreSQL/8.3

Password: *

PrimaryGroupID: 1

RealName: PostgreSQL

RecordName: postgres

RecordType: dsRecTypeStandard:Users

UniqueID: 503

UserShell: /bin/bash


postgres グループも作られてる。 [システム環境 > アカウント] のグループで見られるから、これは正しいんだろな。

$ dscl . -read /Groups/postgres

AppleMetaNodeLocation: /Local/Default

Password: *

PrimaryGroupID: 500

RealName: postgres

RecordName: postgres

RecordType: dsRecTypeStandard:Groups

ん??? そーいや ACTC 10.5 勉強したときに Macアカウント管理が何パターンかあるっての読んだ記憶はあるけど、きれいに忘れてるよ、やべー。^^;)>

方向がそれたけど Mac でのアカウント管理を復習しとこ、いい機会だし。:-)


dscl って何さ?

そもそも dscl ってなんなんでしょ? ここからスタートだよ。^^;)>

ユーザ管理はMac OS X 10.4以前のNetInfoや一般的な/etc/passwdなどを使用せず、OpenDirectoryを使用する。

OpenDirectoryにCUIでアクセスするにはdsclを使用する。

Life with IT - ユーザ管理方法%28dscl%29

mac の場合、アカウントは OpenDirectory になってて /etc/passwd とは別管理になってるのは知ってたけど、[システム環境 > アカウント] で見えるとは限らないってことね。

OpenDirectory に管理されてるアカウントを見る場合、-list オプションを使う。こんな感じ。

$ dscl localhost -list /Local/Default/Users

...

postgres

...


前にやったように -read オプションを使うと OpenDirectory で管理されてるユーザやグループの設定情報も見れる。こんな感じ。

$ dscl localhost -read /Local/Default/Users/watanata2000

$ dscl localhost -read /Local/Default/Groups/admin

dscl の使い方は、この2つが分かりやすいし、詳しいかな。


postgres の HOME 修正なんだけど、OpenDirectory の場合、NFSHomeDirectory の値を変更すれば良さげ。

$ dscl localhost -read /Local/Default/Users/postgres

NFSHomeDirectory: /Library/PostgreSQL/8.3

...


dscl の -create オプションを使うと値の変更ができるので /opt/local/var/db/postgresql に変更する。

$ sudo dscl localhost -create /Local/Default/Users/postgres NFSHomeDirectory /opt/local/var/db/postgresql

試しに postgres ユーザに変更すると期待通りの場所が HOME になってる。OK だね! :-)

$ dscl localhost -read /Local/Default/Users/postgres

NFSHomeDirectory: /opt/local/var/db/postgresql

...

$ su - postgres

$ pwd

/opt/local/var/db/postgresql

$ env | grep HOME

HOME=/opt/local/var/db/postgresql


あとは pgctl でプロセス起動して pgAdmin から接続できれば完了。これが本題なんだった。ちゃんと以下でプロセスを起動して、ちゃんと pgAdmin から接続できることを確認して OK :-)

$ /opt/local/lib/postgresql83/bin/pg_ctl -D /opt/local/var/db/postgresql83/defaultdb -l logfile start

環境

2011-05-02

rails3 国際化対応2

| 01:05 | rails3 国際化対応2 - 日々是笑心 を含むブックマーク rails3 国際化対応2 - 日々是笑心 のブックマークコメント

i18n_generators ってすごいじゃん。scaffold とかで作ったクラスがあると、それも日本語化してくれて translation_ja.yml を作ってくれる。

$ rails generate scaffold custemer custer_cd:string custer_name:string birthday:date

$ rails generate i18n ja

...

create config/locales/ja.yml

create config/locales/translation_ja.yml


translation_ja.yml を見るとちゃんとモデルや属性が抽出されてて、日本語訳が設定されてる。すげー ... ってよく見たら、日本語訳が変。やっぱり手直しは必要なわけね。 ^^;)

ja:
  activerecord:
    models:
      customer: "お客様"  #g

    attributes:
      customer:
        customer_cd: "お客様は、CDの"  #g
        customer_name: "顧客名"  #g
        birthday: "誕生日"  #g

rail3 国際化対応

| 00:30 | rail3 国際化対応 - 日々是笑心 を含むブックマーク rail3 国際化対応 - 日々是笑心 のブックマークコメント

rais 2.2 から国際化対応が正式採用されたけど、なんか日本語化でいろんなのが出てるっぽい。とりあえず svenfuchs/rails-i18n でいってみよ。:-)

インストールはこんな感じ。

$ gem install i18n thor


APP_ROOT にある Gemfile の最後にこれ(↓)を追記する。

gem 'i18n_generators'


bundle を実行する。gem よりしっかりした依存関係のチェック機構らしい。自分の環境だと complete! って言われた。不足があれば追加してくれるっぽい。

$ bundle install

i18n generator を実行する。config/application.rb を上書きする?って確認されるので 'Y' (overwrite) する。

$ rails generate i18n ja

実行すると config/application.rb のロケールが日本語になる。

config.i18n.default_locale = 'ja'


あと config/locales/ja.yml が追加されてエラーメッセージとか日本語化されてる。こんな感じ。

...
  errors:
    format: "%{attribute} %{message}"

    messages: &errors_messages
      inclusion: "は一覧にありません。"
      exclusion: "は予約されています。"
      invalid: "は不正な値です。"
      confirmation: "が一致しません。"
      accepted: "を受諾してください。"
      empty: "を入力してください。"
      blank: "を入力してください。"
      too_long: "は%{count}文字以内で入力してください。"
      too_short: "は%{count}文字以上で入力してください。"
      wrong_length: "は%{count}文字で入力してください。"
      not_a_number: "は数値で入力してください。"
      not_an_integer: "は整数で入力してください。"
      greater_than: "は%{count}より大きい値にしてください。"
      greater_than_or_equal_to: "は%{count}以上の値にしてください。"
      equal_to: "は%{count}にしてください。"
      less_than: "は%{count}より小さい値にしてください。"
      less_than_or_equal_to: "は%{count}以下の値にしてください。"
      odd: "は奇数にしてください。"
      even: "は偶数にしてください。"
...
おまけ

rails3 になってファイル構成が変わってて困った。APP_ROOT にある Gemfile ってのが増えてる。Bundler ってツール用の設定ファイルで plugin 間の依存関係を辿って環境構築してくれるツールらしい。gem より便利ツールってことで rails3 に採用されたっぽい。こちらさん(↓)が詳しく解説してくれてるよ。:-)


ついでに config/application.rb も増えてる。これも config/environment.rb から独立したものっぽい。

require File.expand_path('../boot', __FILE__)
require 'rails/all'
Bundler.require(:default, Rails.env) if defined?(Bundler)
module [APP_NAME]
  class Application < Rails::Application
    config.encoding = "utf-8"
    config.filter_parameters += [:password]
  end
end

その分、config/environment.rb がすっきりしたなぁ :-)

require File.expand_path('../application', __FILE__)
[APP_NAME]::Application.initialize!

おまけ2

ロケール指定で言語を切り替える方法が書いてあった。ロケール固定より便利だよね。こんど試してみよ :-)

# app/controllers/application.rb

before_filter :set_locale

def set_locale

I18n.locale = params[:locale]

end

Ruby On Rails 国際標準化機能 I18n その1

rails3 のコマンドが変わってるよ

| 21:35 | rails3 のコマンドが変わってるよ  - 日々是笑心 を含むブックマーク rails3 のコマンドが変わってるよ  - 日々是笑心 のブックマークコメント

あれ? rails foo でアプリ作れない??? script/* も全然ちがうよ。rails3 って rails2 のときとコマンド変わってるんだね。やべ、変化についてけてないよ ^^;)

アプリを作るときはこんな感じ。

$ rails new [app]


scaffold はこんな感じ。

$ rails generate scaffold [foo] ...


サーバ起動はこんな感じ。

$ rails server


やれることは変わってないんだけど、ビミョーな変化に戸惑う。慣れるしかないな。^^)

ひさしぶりに rails 使ってみよ

| 21:15 | ひさしぶりに rails 使ってみよ - 日々是笑心 を含むブックマーク ひさしぶりに rails 使ってみよ - 日々是笑心 のブックマークコメント

ちょっと仕事で使いたいからアプリ作って♪ お気楽な奥さんからのリクエスト。そんな簡単な話っすか?まーいいけど。^^;) rails3 になってから全然 ruby さわってないし、久しぶりに rails でやっちゃえ! :-)

Ruby の環境構築をしはじめて、いきなりびっくり。今って RVM (Ruby Version Manager) で複数の Ruby バージョンを簡単に管理できるんだ。めちゃ便利じゃん :-)


ちなみに rvm のインストールは↓って書いてあるんだけど、なぜか自分の環境で実行できない。

$ bash < <( curl http://rvm.beginrescueend.com/releases/rvm-install-head )


どーしよ (T^T) と思ってたら、こんな(↓)なインストール方法を発見!

$ mkdir -p ~/.rvm/src/ && cd ~/.rvm/src && rm -rf ./rvm/ && git clone git://github.com/wayneeseguin/rvm.git && cd rvm && ./install

ja.nishimotz.com - RVM

MacPortsgit 入れるのに時間かかっちゃったけど、上のコマンドを実行して ~/.bashrc に↓書きたしてさくっと動いた。あ〜よかった :-)

if -s /home/ユーザ名/.rvm/scripts/rvm ? ; then

source /home/ユーザ名/.rvm/scripts/rvm ;

fi


続いて最新版 ruby の 1.9.2 をインストールターミナル起動時に PATH に自動設定されるように default 指定しておけば OK。ついでに 1.8.7 と 1.8.6 もいれとこ。:-)

$ rvm install 1.9.2

$ rvm 1.9.2 --default


インストールしたのを確認すると、こんな感じになってる。

$ rvm list

rvm rubies

ruby-1.8.6-p420 [ x86_64 ]

ruby-1.8.7-p334 [ x86_64 ]

=> ruby-1.9.2-p180 [ x86_64 ]


あとは rails とか gem インストールして環境構築おわり。さて、やりまっか :-)

環境

2010-04-01

restful_authentication の rspec で NoMethodError

| 13:46 | restful_authentication  の rspec で NoMethodError  - 日々是笑心 を含むブックマーク restful_authentication  の rspec で NoMethodError  - 日々是笑心 のブックマークコメント

前のプロジェクトで使ってた restful_authentication を vender/plugins にコピペして

user sessions を作成後 rake rspec を実行したらエラー???

こんな感じ。

>rake spec
................................................................................
..........................FFF.............FF...........F........................
................................................................................
........................................FFF........

1)
NoMethodError in 'UsersController named routing should route users_path() to /us
ers'
undefined method `formatted_users_path' for #<Spec::Rails::Example::ControllerEx
ampleGroup::Subclass_6::Subclass_3:0x389dc78>
./spec/controllers/users_controller_spec.rb:140:

…

291 examples, 9 failures
rake aborted!

どうやら Rails2.3 から formatted_* ってパス指定ができなくなったのが原因っぽい。

Rails has dropped the formatted_* routes in favor of passing in a :format ption, so we need to update the generated tests/specs for Restful Authentication to use this new format.

No more formatted_* routes in edge rails

patch 出してくれてる人がいるみたい。

https://rails.lighthouseapp.com/projects/8994/tickets/1359

それに formatted_* 修正版を github に up してくれてるっぽい。

http://github.com/dscataglini/restful-authentication

github で試してみよ。

ruby script/plugin install git://github.com/dscataglini/restful-authentication.git
ruby script/generate authenticated user sessions

おし! NoMethodError は消えた! でも、あと3つ、あれ? (^^;)

>rake spec
................................................................................
................................................................................
................................................................................
........................................FFF........

1)
'AccessControlTestController requesting json; I am not logged in and Login not r
equired succeeds' FAILED
expected "{\"success\": \"json\"}", got "{\"success\":\"json\"}"
./spec/controllers/access_control_spec.rb:67:

2)
'AccessControlTestController requesting json; I am logged in and Login is requir
ed succeeds' FAILED
expected "{\"success\": \"json\"}", got "{\"success\":\"json\"}"
./spec/controllers/access_control_spec.rb:67:

3)
'AccessControlTestController requesting json; I am logged in and Login not requi
red succeeds' FAILED
expected "{\"success\": \"json\"}", got "{\"success\":\"json\"}"
./spec/controllers/access_control_spec.rb:67:

Finished in 6.812 seconds

291 examples, 3 failures
rake aborted!

[確認環境]

2010-02-27

Rails One-Click Installer の gem を手動 update する

| 21:49 | Rails One-Click Installer の gem を手動 update する - 日々是笑心 を含むブックマーク Rails One-Click Installer の gem を手動 update する - 日々是笑心 のブックマークコメント

前と同じ Rails 環境を Windows 上に作り直そうと Ruby Installer にアクセスしてみたら

One-Click Installer は old となってた。そーいえば、そんな話を聞いた気が…。

細かいことは置いといてインストール続行。gem バージョンを確認したら

>gem environment
RubyGems Environment:
  - VERSION: 0.9.4 (0.9.4)
  - INSTALLATION DIRECTORY: c:/tmp/ruby1.8.6-26/lib/ruby/gems/1.8
  - GEM PATH:
     - c:/tmp/ruby1.8.6-26/lib/ruby/gems/1.8
  - REMOTE SOURCES:
     - http://gems.rubyforge.org

当たり前だけど、やっぱり古い。たしか Rails2.2 以降は gem が 1.3.0 以上じゃないとダメなので gem アップデートを実行。

>gem update --system 

あれ?エラー?おんじゃ

>gem install rubygems-update 

こっちでもエラー?

前はこのどっちかで gem アップデートできたんだけど、今はNGっぽい。gem 古すぎ?

ググってみたら、やっぱり同じことで悩んでた人いたみたい。 解決策みっけ〜♪

Hi, I have some problems with that in Windows xp to, but after looking around in the web the simpliest solution is:

1. Download Ruby Gem files from RubyForge => http://rubyforge.org/frs/?group_id=126

2. Unzip de File, open the command Line and go to the directory in which you unzip the files.

3. Execute the setup.rb file, typing "ruby setup.rb"

install gems problem in windows

さっそく http://rubyforge.org/projects/rubygems/ から最新版の rubygems-1.3.5.zip を取得。解凍フォルダにある setup.rb を実行。

C:\tmp\rubygems-1.3.5>ruby setup.rb
RubyGems 1.3.5 installed

・ソ=== 1.3.5 / 2009-07-21

Bug fixes:

* Fix use of prerelease gems.
* Gem.bin_path no longer escapes path with spaces. Bug #25935 and #26458.

Deprecation Notices:

* Bulk index update is no longer supported (the code currently remains, but not
  the tests)
* Gem::manage_gems was removed in 1.3.3.
* Time::today was removed in 1.3.3.

------------------------------------------------------------------------------

RubyGems installed the following executables:
        c:/tmp/ruby1.8.6-26/bin/gem

C:\tmp\rubygems-1.3.5>gem -v
1.3.5

おし、解決! :-)

環境
WinXP + Ruby 186-26