Railsの最近のブログ記事

#7 とりあえずWebScrap完成しました!

   ブックマークに追加する
まだ直すところは結構あるのですが、最近時間をとれないので全部直すと大分時間が必要になってしまいます。
基本的な機能は全てできていますのでこの辺でリリースすることにします。
今後も時間をみてメンテはするつもりです。

テストは自分のGMailでしか試せていないため、別のメーラーだと上手くいかないかもしれません。
以下機能説明です。

WebScrap機能説明
・一般的なソーシャルブックマーク(共有機能はまだありません)
・会員登録時のメールアドレスにスクラップしたページの内容をメールする

まとめて読みたかったり、Webページを自分のメールアドレスに残したい時は結構便利だと思います。
ブックマークレットも用意しましたので使い方も簡単です。

それでは、以下URLより、使ってみてください。
※サーバ容量もあるので会員が増えたら、新規会員登録は停止する可能性があります。

WEBScrap - ボタンを押すだけ。お気に入りページをメールに保存!Webブックマーク管理


これで今年の目標の3つサービス立ち上げるの1つ立ち上げ完了!

#6 Railsでメッセージをフェードする(effects.js)

   ブックマークに追加する
今回は、Railsでメッセージを徐々に不透明にしていき、最後に消えるという処理を行う方法です。
scaffold等で自動生成するとflash[:notice]でメッセージが表示されると思いますが、それに対するエフェクトです。ちょっと、かっこよくなりますよ。

例は指定のrhtmlに対する処理です。

<head>
<%= javascript_include_tag :defaults %>
</head>
<<<省略 >>>
  <% if flash[:notice]  -%>
    <div id="notice">
      <%= flash[:notice] %>
      <script>
      <%= "new Effect.Fade('notice', {duration: 5})" %>
      </script>
    </div>
  <% end  -%>
<<<省略 >>>

こんなに簡単にできます。ただソースがかっこわるいんですよね。
もっときれいにできる方法があったら教えてください。

#5 railsでユーザーエージェント別でロジックを切り替える

   ブックマークに追加する
WebScrapもほとんどできているのですが、細かなところの手直しをしています。
今回は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 -%>


【参考サイト】

#4 lighttpdで複数のRailsアプリケーションを立ち上げる(vartualhost)

   ブックマークに追加する
WebScrap(Railsアプリケーション)を立ち上げるのにApacheではなく、lighttpdを使おうと思います。
lighttpdを使用する理由は、Apacheは2系ではサポートされておらず、lighttpdの方が軽量で簡単ということだからです。
※それと実験的に新しいWebサーバを試してみたかったということもあります。

それでは手順は以下の通り。

1) サブドメインを設定する


23scripts.netのDNS設定で以下の設定をする

webscrap IPaddress A 

2) lighttpd.confの設定

ApacheでいうところのvartualHostの設定は、lighttpdでは、$HTTP["host"]で設定します。
ちなみに今回はサブドメインでrailsアプリケーションを切り替えましたが、URIで変更することも可能です。
※その場合は$HTTP["url"]を使用する
※今回はサブドメインでの設定例

$HTTP["host"] == "webscrap.23scripts.net" {
  var.servername               = "webscrap.23scripts.net"
  accesslog.filename          = "/var/log/lighttpd/" + var.servername + "/access.log"
  server.errorlog             = "/var/log/lighttpd/" + var.servername + "/error.log"
  server.document-root      = "/webscrap/public"
  server.error-handler-404   = "dispatch.fcgi"
  fastcgi.server             = ( "dispatch.fcgi" =>
                               ( "webscrap" =>
                                 (
                                   "socket" => "/var/run/webscrap.fcgi.socket",
                                   "bin-path" => "/webscrap/public/dispatch.fcgi",
                                   "bin-environment" => ( "RAILS_ENV" => "production" )

                                 )
                               )
                            )
}
はじめは、以下のsocketエラーが発生しましたが、”socket”の設定をしたら直りました。

2008-03-15 10:12:08: (mod_fastcgi.c.2703) fcgi-server re-enabled: unix:/tmp/application.fcgi.socket-0

3) lighttpdの再起動

再起動して、指定したドメインにアクセスしれば正常に画面が表示されます


/etc/init.d/lighttpd restart

Apacheモジュールも結構使いたいため、今後はApache+lighttpdで構築しようと思います。

【参考サイト】
非常に参考になりました。より詳細にlighttpdの設定方法がわかります。

#3 RailsでActiveRecord のエラーメッセージを日本語化する(ActiveHeart)

   ブックマークに追加する
ブログの更新も大分滞っていました。仕事が忙しくてなかなかWebScrapも作成する時間があまり取れないんですよね。おおよそ機能はつくれたのでいくつか、忘れないようにメモしときます。

今回は、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

【参考サイト】

#2 Railsで別サイトへリダイレクト(redirect_to)

   ブックマークに追加する
こちらもWebScrapアプリケーションを作成中に疑問に思ったので覚書として書きます。操作完了したら元URLへリダイレクトしようと思ったのですが別サイト(別ドメイン)へのリダイレクトを以下2つの方法で試しました。

renderメソッドでは外部サイトにはリダイレクトできず、redirect_toを使用したら上手くいきました。

参考プログラムは以下の通りです。


    if @item.save
      flash[:notice] = 'Item was successfully created.'
      redirect_to("http://www.sample.com/") 
    else
      render :action => 'new'
    end

#1 RailsでHTMLメールを送信する(ActionMailer)

   ブックマークに追加する
以前に話した「WebScrap」を仕事終わってから、作成しているのですが、Webページをキャッシュする部分でDBに保存するのはリソース上やはり厳しいということで自分のGMailに送信することにしました。

これであれば、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ですね。 

#0 RailsでScrapBookのWeb版をつくる(WebScrap)

   ブックマークに追加する
最近、Webアプリケーションを全然つくっていなかったので、以前からつくりたかったScrapBookのWeb版をつくりたいと思います。過去のブログで書いた「Firefoxで必ず使う7つのアドオン」の3位にしたScrapBookの簡易版(きちんとつくるのは手間がかかりそうなので・・・)をWeb上に保存できるサービスを考えてみたいなと思います。
※この前読んだレバレッジ勉強法にもあるようにWebのデータをスクラップできて、どんどん捨てていくようなことが簡単にできるように

ということでいつも通り要件定義

  • まずはユーザ登録(メールアドレスとパスワードくらいで十分でしょう)
  • URLを入力するとサーバに保存できる
  • どこからでも登録したサイトが確認できて、ブックマークと違いリンクが消えていることがない(データをサーバに保存するから)
サービス名はWebScrapとします。

片手間でも2週間くらいでつくれないかなぁー。

#6 ActionMailで会員登録時にメール送信する

   ブックマークに追加する
会員登録時にメールを送信し、クリック後会員登録完了とすることで
メールアドレスのチェックをおこなう。
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分くらいでできちゃいます。

#5 ログイン画面を作成する(gem install login_generator)

   ブックマークに追加する
ログイン機能は、作成すると案外面倒なもの。
他のフレームワーク同様、Railsにももちろん他のエンジニアが作成したモジュールを
簡単に再利用できる仕組みがととのっています

  • まずはrootユーザに変更
    $ su - root
    Password:
  • gemlogin_generatorをインストールする
# gem install login_generator
Bulk updating Gem source index for: http://gems.rubyforge.org
Successfully installed login_generator-1.2.2
  • インストールが正常に完了したら、以下コマンドで作成開始
  (以下はコントローラーをaccountで生成)

 $ ruby script/generate login account
      create  lib/login_system.rb
      create  app/controllers/account_controller.rb
      create  test/functional/account_controller_test.rb

このアーカイブについて

このページには、過去に書かれたブログ記事のうちRailsカテゴリに属しているものが含まれています。

前のカテゴリはmyTaskです。

次のカテゴリはSEOです。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

あわせて読みたいブログパーツ
フィードメーター - ウェブ-HACKS 「とりあえずやってみよう!」ブログ   
track feed
  • SEO対策 
  • _ 
  • _ 
  •  
  •  

このブログはクリエイティブ・コモンズでライセンスされています。