ウェブ-HACKS 「とりあえずやってみよう!」ブログでタグ「Rails」が付けられているもの
WebScrapもほとんどできているのですが、細かなところの手直しをしています。
今回はPC、モバイルで処理を分けたい時の方法です。
以下の通りで@requestオブジェクトから簡単に取り出せます。
(controllersでもviewsでもどちらでもOK)
たとえば、viewで切り替えたい場合も以下でOK!
【参考サイト】
今回はPC、モバイルで処理を分けたい時の方法です。
以下の通りで@requestオブジェクトから簡単に取り出せます。
(controllersでもviewsでもどちらでもOK)
user_agent = @request.user_agent puts user_agent #=> Mozilla/5.0 (Windows; U; Windows NT 5.1; ja; rv:1.8.1.12) Gecko/20080201 Firefox/2.0.0.12
たとえば、viewで切り替えたい場合も以下でOK!
<% if /agent/ =~ @request.user_agent -%> 処理 <% end -%>
【参考サイト】
ブログの更新も大分滞っていました。仕事が忙しくてなかなかWebScrapも作成する時間があまり取れないんですよね。おおよそ機能はつくれたのでいくつか、忘れないようにメモしときます。
今回は、Railsのエラーメッセージを日本語化するというもの。
Ruby-GetTextを使うのが一般的のようですが、今回はそこまできっちり作らなくても良いかなと思いActiveHeartを使用しました。以下手順載せます。すごい簡単ですよ。
まず以前にSubversionをインストールしてますので、railsコマンドで生成したフォルダで以下実行。
これだけでエラーメッセージが日本語化します。すごく簡単ですよね。
テーブルのカラム名はそのままですので、その場合はmodelに以下設定をすればOK
set_field_namesでカラム名と表示文字列をマッピングする
これで日本語化はOKです。ちなみにActiveHeart自体は非推奨とされており、Ruby-GetTextを使用するようにコメントされていますね。確かにサービスのグローバル化を考えればその方が良いと思います。
私はActiveRecordのエラー文言を日本語にしたいだけでしたので他のモジュールはコメントアウトしました。
一応そちらも記載しておきます。
【参考サイト】
今回は、Railsのエラーメッセージを日本語化するというもの。
Ruby-GetTextを使うのが一般的のようですが、今回はそこまできっちり作らなくても良いかなと思いActiveHeartを使用しました。以下手順載せます。すごい簡単ですよ。
まず以前にSubversionをインストールしてますので、railsコマンドで生成したフォルダで以下実行。
$ ruby script/plugin install http://svn.rails2u.com/public/plugins/trunk/active_heart/ + ./active_heart/init.rb + ./active_heart/lib/active_record_messages_ja.rb + ./active_heart/lib/iso2022jp_mailer.rb + ./active_heart/lib/trans_sid.rb
これだけでエラーメッセージが日本語化します。すごく簡単ですよね。
テーブルのカラム名はそのままですので、その場合はmodelに以下設定をすればOK
set_field_namesでカラム名と表示文字列をマッピングする
例)
class Bookmark < ActiveRecord::Base
set_field_names :title => 'タイトル', :url => 'URL'
validates_presence_of :title, :url,
:message => "が未入力です"
end
これで日本語化はOKです。ちなみにActiveHeart自体は非推奨とされており、Ruby-GetTextを使用するようにコメントされていますね。確かにサービスのグローバル化を考えればその方が良いと思います。
私はActiveRecordのエラー文言を日本語にしたいだけでしたので他のモジュールはコメントアウトしました。
一応そちらも記載しておきます。
warn 'ActiveHeart is obsolute plugin!' warn 'Please use Ruby-GetText or jpmobile' require_dependency 'active_record_messages_ja'if defined? ActiveRecord::Base
# Comment Out!
#require_dependency 'trans_sid' #require_dependency 'iso2022jp_mailer' if defined? ActionMailer::Base
【参考サイト】
こちらもWebScrapアプリケーションを作成中に疑問に思ったので覚書として書きます。操作完了したら元URLへリダイレクトしようと思ったのですが別サイト(別ドメイン)へのリダイレクトを以下2つの方法で試しました。
renderメソッドでは外部サイトにはリダイレクトできず、redirect_toを使用したら上手くいきました。
参考プログラムは以下の通りです。
renderメソッドでは外部サイトにはリダイレクトできず、redirect_toを使用したら上手くいきました。
参考プログラムは以下の通りです。
if @item.save
flash[:notice] = 'Item was successfully created.'
redirect_to("http://www.sample.com/")
else
render :action => 'new'
end
以前に話した「WebScrap」を仕事終わってから、作成しているのですが、Webページをキャッシュする部分でDBに保存するのはリソース上やはり厳しいということで自分のGMailに送信することにしました。
これであれば、Web上にHTMLのキャッシュを残しておくことができ、さらに過去にキャッシュしたHTMLページのデータもGoogleの検索エンジンで見つけられます。
Railsで通常のメールを送信するのは、以前の記事(ActionMailer)に書きましたが、HTML形式のメール送信の方法は以下の通りです。
まずはemailオブジェクトを生成し、content_typeを設定してからメール送信すればOKですね。
これであれば、Web上にHTMLのキャッシュを残しておくことができ、さらに過去にキャッシュしたHTMLページのデータもGoogleの検索エンジンで見つけられます。
Railsで通常のメールを送信するのは、以前の記事(ActionMailer)に書きましたが、HTML形式のメール送信の方法は以下の通りです。
- コントローラーに以下メソッドをprivateメソッドとして準備しました。
def sendmail(title, content, mail)
email = RMailer.create_sent( title, content, to )
email.set_content_type("text/html")
ScrapMailer.deliver(email)
end
まずはemailオブジェクトを生成し、content_typeを設定してからメール送信すればOKですね。
最近、Webアプリケーションを全然つくっていなかったので、以前からつくりたかったScrapBookのWeb版をつくりたいと思います。過去のブログで書いた「Firefoxで必ず使う7つのアドオン」の3位にしたScrapBookの簡易版(きちんとつくるのは手間がかかりそうなので・・・)をWeb上に保存できるサービスを考えてみたいなと思います。
※この前読んだレバレッジ勉強法にもあるようにWebのデータをスクラップできて、どんどん捨てていくようなことが簡単にできるように
ということでいつも通り要件定義
片手間でも2週間くらいでつくれないかなぁー。
※この前読んだレバレッジ勉強法にもあるようにWebのデータをスクラップできて、どんどん捨てていくようなことが簡単にできるように
ということでいつも通り要件定義
- まずはユーザ登録(メールアドレスとパスワードくらいで十分でしょう)
- URLを入力するとサーバに保存できる
- どこからでも登録したサイトが確認できて、ブックマークと違いリンクが消えていることがない(データをサーバに保存するから)
片手間でも2週間くらいでつくれないかなぁー。
会員登録時にメールを送信し、クリック後会員登録完了とすることで
メールアドレスのチェックをおこなう。
railsではActionMailerという仕組みにより、簡単にテンプレートメールを送信できます。
以下5つのSTEPで実装できます。
1) Rails環境ファイルにメールサーバを設定
以下environment.rbファイルにメールサーバの設定をする
- mytask/config/environment.rbに以下追加(下線部は環境によって変更する)
2) generateを使ってActionMailerを作成する
モデルとして作成されるので注意する。テンプレートファイルはviewファイルとして生成される
3) model(accout_mailer)の編集
※app/models/account_mailer.rbに以下メソッドを追加する
4) メールのテンプレートファイルを編集する
これで完了、5分くらいでできちゃいます。
メールアドレスのチェックをおこなう。
railsではActionMailerという仕組みにより、簡単にテンプレートメールを送信できます。
以下5つのSTEPで実装できます。
1) Rails環境ファイルにメールサーバを設定
以下environment.rbファイルにメールサーバの設定をする
- mytask/config/environment.rbに以下追加(下線部は環境によって変更する)
# Include your application configuration below
ActionMailer::Base.delivery_method = :smtp
ActionMailer::Base.server_settings = {
:address => "address",
:port => 25,
:domain => 'domain',
:user_name => 'user_name',
:password => 'password',
:authentication => :login
}
2) generateを使ってActionMailerを作成する
モデルとして作成されるので注意する。テンプレートファイルはviewファイルとして生成される
$ ruby script/generate mailer AccountMailer sent
exists app/models/
create app/views/account_mailer
exists test/unit/
create test/fixtures/account_mailer
create app/models/account_mailer.rb
create test/unit/account_mailer_test.rb
create app/views/account_mailer/sent.rhtml
create test/fixtures/account_mailer/sent
3) model(accout_mailer)の編集
※app/models/account_mailer.rbに以下メソッドを追加する
$ ruby script/generate mailer AccountMailer sent
exists app/models/
create app/views/account_mailer
exists test/unit/
create test/fixtures/account_mailer
create app/models/account_mailer.rb
create test/unit/account_mailer_test.rb
create app/views/account_mailer/sent.rhtml
create test/fixtures/account_mailer/sent
4) メールのテンプレートファイルを編集する
※mytask/app/views/account_mailer/sent.rhtml を編集する5) controllerからメールモデルを呼び出す
def sendmail
@user = User.find(params[:id])
AccountMailer.deliver_sent(@user)
end
これで完了、5分くらいでできちゃいます。
ログイン機能は、作成すると案外面倒なもの。
他のフレームワーク同様、Railsにももちろん他のエンジニアが作成したモジュールを
簡単に再利用できる仕組みがととのっています
他のフレームワーク同様、Railsにももちろん他のエンジニアが作成したモジュールを
簡単に再利用できる仕組みがととのっています
- まずはrootユーザに変更
$ su - root
Password:
- gemでlogin_generatorをインストールする
# gem install login_generator Bulk updating Gem source index for: http://gems.rubyforge.org Successfully installed login_generator-1.2.2
- インストールが正常に完了したら、以下コマンドで作成開始
$ ruby script/generate login account
create lib/login_system.rb
create app/controllers/account_controller.rb
create test/functional/account_controller_test.rb
Railsを覚えようと思った理由の1つがscaffoldが使ってみたかったためです。アプリケーションに必要なスケルトンをコマンド1つで作成できるという優れものです。とりあえず本の通りにやってみました。
とりあえず、helpでコマンドを確認する
とりあえず、以下のコマンドで生成されるようです。
ruby script/generate scaffold [model_name] [controller_name]
それでは、実行してみます。
とりあえず、helpでコマンドを確認する
$ ruby script/generate scaffold --help
Usage: script/generate scaffold ModelName [ControllerName] [action, ...]
Rails Info:
-v, --version Show the Rails version number and quit.
-h, --help Show this help message and quit.
General Options:
-p, --pretend Run but do not make any changes.
-f, --force Overwrite files that already exist.
-s, --skip Skip files that already exist.
-q, --quiet Suppress normal output.
-t, --backtrace Debugging: show backtrace on errors.
-c, --svn Modify files with subversion. (Note: svn must be in path)
・・・省略
とりあえず、以下のコマンドで生成されるようです。
ruby script/generate scaffold [model_name] [controller_name]
それでは、実行してみます。
$ ruby script/generate scaffold project mytask
exists app/controllers/
exists app/helpers/
exists app/views/mytask
exists app/views/layouts/
exists test/functional/
dependency model
exists app/models/
exists test/unit/
exists test/fixtures/
・・・省略
これでスケルトンが生成されました。本当に簡単ですね。
今回はMySQLでデータベースとテーブル作成
以下3つのデータベースを作成する
(ただ、_testはどのように使うかよくわからなかったので、_developmentと_productionだけ作りました)
■データベースを作成
■テーブルを作成、カテゴリ(プロジェクト)とタスク
タスクを纏めるカテゴリのようなもの(ここではプロジェクト)テーブルとタスクそのもののテーブルを作成する。
■railsアプリケーションの設定ファイル(DB設定と文字コート)を編集
mytask/config/database.yml を編集
mytask/config/environment.rbに文字コード追加
以下3つのデータベースを作成する
(ただ、_testはどのように使うかよくわからなかったので、_developmentと_productionだけ作りました)
■データベースを作成
- mytask_development
mytask_test- mytask_production
mysql> create database mytask_development;
mysql> create database mytask_production;
mysql> grant all on mytask_development.* to username@localhost identified by 'password';
mysql> grant all on mytask_production.* to username@localhost identified by 'password';
■テーブルを作成、カテゴリ(プロジェクト)とタスク
タスクを纏めるカテゴリのようなもの(ここではプロジェクト)テーブルとタスクそのもののテーブルを作成する。
create table projects (
id int unsigned auto_increment,
name varchar(128) not null,
content varchar(255),
task_count int default 0,
status enum('close','open') default 'close',
created_at timestamp,
updated_at timestamp,
limited_at timestamp,
primary key (id),
index status_idx (status)
);
create table tasks (
id int unsigned auto_increment,
project_id int unsigned not null,
name varchar(128) not null,
content text,
status enum('yet', 'exec', 'finish') default 'yet',
created_at timestamp,
updated_at timestamp,
limited_at timestamp,
primary key (id),
index project_id_idx (project_id),
index status_idx (status)
);
■railsアプリケーションの設定ファイル(DB設定と文字コート)を編集
mytask/config/database.yml を編集
development: adapter: mysql database: mytask_development username: username password: password socket: /var/lib/mysql/mysql.sock encoding: utf8
mytask/config/environment.rbに文字コード追加
#KCODE = 'u' # Be sure to restart your web server when you modify this file.
いよいよ、Railsでアプリケーション作成します。本に書いている通りにすすめていきます。
railsコマンドはアプリケーションに必要なスケルトンを生成してくれるようです。
以下に手順を説明します。
1) railsでアプリケーション作成
rails [アプリケーション名]でrailsアプリケーションを作成する
2) WEBrickで動作確認する
Webrick(ウェブリック)とはRubyで作成されたWebサーバでRails開発(development)では
編集したコードが自動でロードされるため開発効率がよいです。
http://localhost:3000/でアクセスするとRailsのWelcomeページが表示される
railsコマンドはアプリケーションに必要なスケルトンを生成してくれるようです。
以下に手順を説明します。
1) railsでアプリケーション作成
rails [アプリケーション名]でrailsアプリケーションを作成する
$ rails mytask
create app/controllers
create app/helpers
create app/models
create app/views/layouts
create config/environments
create components
create db
・・・省略
2) WEBrickで動作確認する
Webrick(ウェブリック)とはRubyで作成されたWebサーバでRails開発(development)では
編集したコードが自動でロードされるため開発効率がよいです。
$ cd mytask/ $ ruby script/server => Booting WEBrick... => Rails application started on http://0.0.0.0:3000ruby script/server でWEBrickを起動する
http://localhost:3000/でアクセスするとRailsのWelcomeページが表示される
かならずはまってしまうのが環境設定。1回設定すればOKですが、覚書として書いときます。
1) RubyとMySQLのバージョンを以下コマンドで確認できます
とりあえずレンタルサーバはFedora6でMySQLとRubyは既にインストール済み。以下コマンドで各々のバージョンを確認します。
Rubyのバージョンの確認方法
MySQLのバージョンの確認方法
ということで、まずはRailsのダウンロード&インストール
2) RubyGemsのダウンロード
RubyGemsはRubyのパッケージ管理ツールでRailsと関連ライブラリのインストールも簡単に行えるようになります。
というわけで、RubyForgeより「rubygems」をダウンロードする
3) RubyGemsのインストール
いよいよインストール。これが完了すればgemコマンドが使用できるようになります。
3) Railsのインストール
Gemsをインストール後、以下のgemコマンドでrailsをインストールする
こんな感じでOK!
1) RubyとMySQLのバージョンを以下コマンドで確認できます
とりあえずレンタルサーバはFedora6でMySQLとRubyは既にインストール済み。以下コマンドで各々のバージョンを確認します。
Rubyのバージョンの確認方法
$ ruby -v ruby 1.8.5 (2007-09-24 patchlevel 114) [i386-linux]
MySQLのバージョンの確認方法
$ mysql --version mysql Ver 14.12 Distrib 5.0.27, for redhat-linux-gnu (i686) using readline 5.0
ということで、まずはRailsのダウンロード&インストール
2) RubyGemsのダウンロード
RubyGemsはRubyのパッケージ管理ツールでRailsと関連ライブラリのインストールも簡単に行えるようになります。
というわけで、RubyForgeより「rubygems」をダウンロードする
3) RubyGemsのインストール
いよいよインストール。これが完了すればgemコマンドが使用できるようになります。
$ tar xvzf rubygems-0.9.4.tgz
$ ls
rubygems-0.9.4 rubygems-0.9.4.tgz
$ cd rubygems-0.9.4
$ ls
ChangeLog LICENSE.txt Rakefile TODO doc gemspecs pkgs redist setup.rb
GPL.txt README Releases bin examples lib post-install.rb scripts test
# su - root
# ruby setup.rb
3) Railsのインストール
Gemsをインストール後、以下のgemコマンドでrailsをインストールする
# gem install rails --include-dependencies $ rails -v Rails 1.2.4
こんな感じでOK!
次回こそ、Railsでアプリ作成に入ります。
Ruby on Railsはまだ試してみたことがないので、勉強のため、シンプルなタスク管理ツールをつくってみたいと思います。
私はタスク管理にCheck*Pad、SlimTimerなどを使っているのですが、どちらもとてもシンプルで使いやすいです。それらサービスを手本に、よりプロジェクト管理に適したツールに作成しようと思います。自分のタスクを洗い出すツールのため、名前はmyTaskにします。(後から変える可能性ありですが。。。)
簡単な機能紹介。
■ 機能一覧
とりあえずこれくらいでいいでしょう。
では次回からいよいよRailsを使ってみます。
私はタスク管理にCheck*Pad、SlimTimerなどを使っているのですが、どちらもとてもシンプルで使いやすいです。それらサービスを手本に、よりプロジェクト管理に適したツールに作成しようと思います。自分のタスクを洗い出すツールのため、名前はmyTaskにします。(後から変える可能性ありですが。。。)
簡単な機能紹介。
■ 機能一覧
- タスクを書き出せる(リストで見れる)
- タスクに期限を設定できる
- タスクには、未着手、実行中、完了等のステータスがある
- メールで期限がきたら教えてくれる
- カテゴリごとにタスクを纏められる
- タスクは共有できる
- 完了までにかかった時間を確認できる
とりあえずこれくらいでいいでしょう。
では次回からいよいよRailsを使ってみます。

