Home > Ruby Archive
Ruby Archive
ExtJS 9arrows Install作業にちょっとはまる
ExtJsとRailsの連携を参考にするため9arrowsをインストールしました。
Readmeのインストールログには不備があります。その不備を補う情報が下記サイトに載っています。
私も参考にさせて頂きました。管理者様ありがとうございます。
9arrows導入でつまづいた点をメモる
MacにRailsのpostgtesqlアダプタが入れることにはまりました。下記サイトは手動でインストールするときに参考にできるサイトです。ちなみに筆者は手動ではいれていません
Macに手動でRuby-pgを入れる
WEBrick起動時にエラー。下記解決参考サイトです。管理者様ありがとうございます。
Rails 2.2.2でのconfig. action_view. cache_template_extensions
9arrowsのインストール作業は以上です。で、下記は当初の目的の助けになるかもしれないので載せておきます。RailsとExtJsを連携させるTutorialサイト
Tutorial:Using Ext Grid with Ruby on Rails
- Comments: 0
- Trackbacks: 0
ExtJS RSS READER
インターフェイスにExtJSをふんだんに利用したWebアプリケーション作成をしていきたいと思いまして、練習がてらサンプルを利用して作成しました。
ExtJSのサンプルからfeed-viewerを利用して、サーバサイドと連携したrss readerを動作させました。
使用した環境は以下です。
rails2.3.3
MySQL
ExtJS-3.0.0
デモを用意しました。こちらから。
id : guest@example.com
password : guest
で、ログインできます。
またあとで、学んだこと、はまったことを書きたいと思います。
とりあえず
ではでは
- Comments: 0
- Trackbacks: 0
Rails ログイン処理 その2 考察
- 2009-07-04 (土)
- Ruby
ログイン処理は頻繁に使用する機能なので、完全に理解して雛形として開発したいところ。
Railsはプラグインとして提供されているので、ソースを読んで理解していきたいと思います。
プラグインとしては以下二つが有名。
act_as_authenticated(1.2系)
restful_authenticated(2系)
今回はact_as_authenticatedを読んでログイン処理を考察しました。
act_as_authenticatedで特にお世話になったというか、感謝したいサイトは以下の二つ。
http://yugui.jp/articles/680
http://eringi.com/weblog/archives/2007/07/acts_as_authenticated.html
ソース内容を見ると、実行される処理の流れは
- まず、アプリケーション全体で「自動的にログインする」にチェックを入れた場合のオートログインチェック機能が動作します。まだログインしていない段階ではreturn falseなどで実行はされません
- オートログインチェックが終わって、実際のログインフォームからログインをします。その処理です。
# When called with before_filter :login_from_cookie will check for an :auth_token
# cookie and log the user back in if apropriate
def login_from_cookie
return unless cookies[:auth_token] && !logged_in?
user = User.find_by_remember_token(cookies[:auth_token])
if user && user.remember_token?
user.remember_me
self.current_user = user
cookies[:auth_token] = { :value => self.current_user.remember_token , :expires => self.current_user.remember_token_expires_at }
flash[:notice] = "Logged in successfully"
end
end
処理の内容は、
cookie[:auth]が設定されてない、また、ログインしていれば以下処理しない。
:auth_tokenからユーザ情報を取得。次いで情報保持の有効期限をチェック。
通れば、self.current_user = user の箇所でsession[:user]にuser.idをセット。current_userにユーザ情報をセットしています。(この部分は以下のソース)
最後にクッキーに再度、設定。
# Store the given user in the session.
def current_user=(new_user)
session[:user] = (new_user.nil? || new_user.is_a?(Symbol)) ? nil : new_user.id
@current_user = new_user
end
def login
return unless request.post?
self.current_user = User.authenticate(params[:login], params[:password])
if logged_in?
if params[:remember_me] == "1"
self.current_user.remember_me
cookies[:auth_token] = { :value => self.current_user.remember_token , :expires => self.current_user.remember_token_expires_at }
end
redirect_back_or_default(:controller => '/account', :action => 'index')
flash[:notice] = "Logged in successfully"
end
end
大まかに言うとUser.authenticateでログインと加工したパスワードでデータベースに問い合わせます。
またUser.authenticateでユーザ情報が返ってきてcurrent_userに情報がセットされれば、また、1個上のソースを実行しますのでsession[:user]にuser.idをセット。current_userにユーザ情報をセットしています。
そうすれば、current_userでユーザ情報を引っ張ってこれるようになれます。
ログインした後はセッションが切れない限り、current_userが使えて
その他処理、login_requiredやlogged_inなどありますが、act_as_authenticateの役割はオートログイン処理、オートログインチェック処理、ログイン処理、だいたいこんなもんだと思います。(ユーザの登録処理はログイン処理ではないので、ここでは省かせていただきます。別の機会にメール処理でアクティベートする処理を考察したいと思います)
ではでは
- Comments: 0
- Trackbacks: 0
ubuntuでRails環境構築 その2 デプロイ(Apache+Passenger)
- 2009-06-19 (金)
- Ruby
ではRailsアプリケーションをApache+Passengerという構成で設定した作業の覚書ですー。
PHPもApache環境で動いているので、一色単にしたかったのと、Apacheになじみがあったので敷居が低く感じられることがこの構成にした理由です。
以下のサイトを参考にさせてもらいましたー。
分かりやすい説明ですー。ありがとうございましたー。
http://d.hatena.ne.jp/rx7/20080412/p1
ではPassengerをインストールしましょう。
gem install passenger
次にApacheモジュールをインストールします。PassengerのApacheモジュールをコンパイルするには、root権限でpassenger-install-apache2-moduleコマンドを実行します。
$ sudo passenger-install-apache2-module
Welcome to the Phusion Passenger Apache 2 module installer, v2.2.3.
This installer will guide you through the entire installation process. It
shouldn’t take more than 3 minutes in total.Here’s what you can expect from the installation process:
1. The Apache 2 module will be installed for you.
2. You’ll learn how to configure Apache.
3. You’ll learn how to deploy a Ruby on Rails application.Don’t worry if anything goes wrong. This installer will advise you on how to
solve any problems.Press Enter to continue, or Ctrl-C to abort.
Enterでもなんでもいいと思います。自分は1を選択しました。
で以下で、必要なぶつを教えてくれます。
Some required software is not installed.
But don’t worry, this installer will tell you how to install them.Press Enter to continue, or Ctrl-C to abort.
——————————————–
Installation instructions for required software
* To install Apache 2 development headers:
Please run apt-get install apache2-prefork-dev as root.* To install Apache Portable Runtime (APR) development headers:
Please run apt-get install libapr1-dev as root.* To install Apache Portable Runtime Utility (APU) development headers:
Please run apt-get install libaprutil1-dev as root.If the aforementioned instructions didn’t solve your problem, then please take
a look at the Users Guide:
こんな感じで必要なぶつをapt-getしてくださいと教えてくれます。
で、インストール終えてもう一回、passenger-install-apache2-moduleコマンドを打ちます。
$ sudo passenger-install-apache2-module
The Apache 2 module was successfully installed.
Passengerのインストール後はApacheの設定をします。
インストール中に以下の文があります。
(略)
LoadModule passenger_module /usr/lib/ruby/gems/1.8/gems/passenger-2.2.3/ext/apache2/mod_passenger.so
PassengerRoot /usr/lib/ruby/gems/1.8/gems/passenger-2.2.3
PassengerRuby /usr/bin/ruby1.8
(略)<VirtualHost *:80>
ServerName www.yourhost.com
DocumentRoot /somewhere/public # <-- be sure to point to 'public'!
</VirtualHost>
(略)
これらをhttpd.confに記述。
私の場合はLoadmoduleを/etc/apache2/httpd.confに記述
バーチャルホストの設定を
私の場合は/etc/apache2/sites-available/sitesにしました。これもふつーならhttpd.confでいいんじゃないのかな。
$ vim /etc/apache2/httpd.conf
LoadModule passenger_module /usr/lib/ruby/gems/1.8/gems/passenger-2.2.3/ext/apache2/mod_passenger.so
PassengerRoot /usr/lib/ruby/gems/1.8/gems/passenger-2.2.3
PassengerRuby /usr/bin/ruby1.8
$ vim /etc/apache2/sites-available/sites
<VirtualHost *:80>
ServerAdmin ***@**
ServerName :*****.com
DocumentRoot /var/www/web_app/public
<Directory /var/www/web_app>
Options Indexes FollowSymLinks MultiViews ExecCGI
AllowOverride None
Order allow,deny
allow from all
</Directory>
ErrorLog /var/log/apache2/error.log
# Possible values include: debug, info, notice, warn, error, crit,
# alert, emerg.
LogLevel warn
CustomLog /var/log/apache2/access.log combined
ServerSignature On
</VirtualHost>
で、apacheの再起動をしますー。
こんな感じですー。
サブディレクトリの設定もやりましたが、redirect_toやらformのアクションがサブディレクトリを引き継いで実行してくれなかったので、辞めてしまいました。ここではその説明をしないので、図書やら別のサイトで詳細はお願いします。
ではでは。
- Comments: 0
- Trackbacks: 0
ubuntuでrails環境構築 その1 Ruby~Rails
- 2009-06-19 (金)
- Ruby
ubuntuにrails環境を構築しましたー。
今後も同作業をすることもあると思うので残しときますー。
お世話になったサイトは以下です。
http://www.daokaous.com/category/computer/rails/
http://articles.slicehost.com/2009/1/6/ubuntu-intrepid-ruby-on-rails
http://d.hatena.ne.jp/rx7/20080412/p1
ありがとうございましたー。
まず、rubyに関係ないものをインストール。
pacoのインストール
ソースからインストールしたソフトをパッケージ管理してくれるありがたいソフト!
今回はソースからインストールしたものはgemだけだが、後々のことを考えて先にインストールしておく。(抜粋)
wget http://downloads.sourceforge.net/paco/paco-2.0.6.tar.gz
tar zxvf paco-2.0.6.tar.gz
cd paco-2.0.6
./configure –disable-gpaco
make
sudo make install
pacoの使用例を記述してくれていて大変分かりやすいサイトです。
http://www.daokaous.com/category/computer/rails/
で、Rubyのぶつです。
ruby1.8-dev(ruby1.8, libruby1.8) libreadline-ruby1.8, ri1.8(rdoc1.8, irb1.8) libruby1.8-dbg, libopenssl-rub(libopenssl-ruby1.8)
()の中は依存関係でくっついてくるぶつです。それぞれsudo apt-getしてください。
作業しやすいようにシンボリックリンクを作成しました。
sudo ln -s /usr/bin/ruby1.8 /usr/bin/ruby
sudo ln -s /usr/bin/ri1.8 /usr/bin/ri
sudo ln -s /usr/bin/rdoc1.8 /usr/bin/rdoc
sudo ln -s /usr/bin/irb1.8 /usr/bin/irb
次にrubygemsをソースからインストール
wget http://rubyforge.org/frs/download.php/55066/rubygems-1.3.2.tgz
tar zxvf rubygems-1.3.2.tgz
cd rubygems-1.3.2
sudo paco -D ruby setup.rb
# 作業しやすいようにシンボリックリンク作成
sudo ln -s /usr/bin/gem1.8 /usr/bin/gem
ではRailsをインストール
sudo gem update –system
sudo gem install rails
こんな感じですー。
次はデプロイと実行環境のエントリですー。
ではでは。
- Comments: 0
- Trackbacks: 0
Rails Action_mailer 文字化け
- 2009-06-19 (金)
- Ruby
subjectが文字化けしてしまうことにはまった。
んでgoogle先生で調べると大体こんな感じ。
gettextが必要だからgem instal gettextをしろ、と。
メール送信のところでrequire ‘gettext/rails’とあと二つ三つしろ、と。
そして、エラー発生。
MissingSourceFile (no such file to load — gettext/rails):
そして調べると、ENV['GEM_HOME']を明示的に宣言しろ、と。
これらをやっても文字化け直らないし、メールが送られない状況も出たし、散々でした。
で、以上のものをやらなくても一発で解決してくれたのが以下のライブラリ。
http://blog.imishin.com/projects/ruby/actionmailerja/
こちらからダウンロードのページにいけます。
http://github.com/kusakari/actionmailer_ja/tree/master
ベンダープラグインフォルダに入れるだけ。なんて便利なものを作ってくださったんだ。日本語対応と携帯でのキャリア分け、文字機種依存文字の対応方法等。便利なのでは。ありがとうございました。
中身を今度、リーディングしてエントリに書いてみたいです。
ではでは。
- Comments: 0
- Trackbacks: 0
Rails Gmailを使ったメール送信でエラー wrong number of arguments (3 for 2)
- 2009-06-19 (金)
- Ruby
ローカル環境でのメール処理はGmailのsmtpサーバを利用して送信していました。
railsでGmailを利用する方法は下記URLに詳しく載ってます。
http://ibushikin.blogspot.com/2009/02/railsactionmailer.html
http://yakinikunotare.boo.jp/orebase/index.php?Ruby%20on%20Rails%2FActionMailer%A4%C7TLS%A4%F2%BB%C8%A4%C3%A4%BF%A5%E1%A1%BC%A5%EB%C1%F7%BF%AE
http://www.railsforum.com/viewtopic.php?id=12875
これらのやり方はplugin配下にaction_mailer_tlsライブラリをおいてます。また他のやり方もあるようですが、まぁ今回はスルーしておきます。
でローカル環境でメール送信が成功していたものが、リモートといいますか本番サーバといいますか、とにかく外部公開サーバで動かすと下記エラーを吐くように。
wrong number of arguments (3 for 2)
/var/www/****/vendor/plugins/action_mailer_tls/lib/smtp_tls.rb:8:in `check_auth_args’
/var/www/****/vendor/plugins/action_mailer_tls/lib/smtp_tls.rb:8:in `do_start’
グーぐる先生で調べてみると発見。記述された方本当にありがとうございます。
http://d.hatena.ne.jp/shun0102/20081226/1230258029
/lib/smtp_tls.rb:8:in `check_auth_args’から
/vendor/plugins/action_mailer_tls/lib/smtp_tls.rbの8行目
check_auth_args 呼出時のパラメタ authtype を削除したらメール送信できました。
とりあえず。
ではでは。
- Comments: 0
- Trackbacks: 0
Ruby ハッシュと配列のFind
- 2009-05-13 (水)
- Ruby
arrayとhashのfindクラスがどういう動きをするか分からなかったので調べてみました。
下記サイトに詳しく載っていたので引用させてもらいます。
http://homepage1.nifty.com/~tetsu/ruby/tips/
Array クラスでは、配列の要素に一致したものがあるか? という判定には Array#include? が使用できます。 これをブロックを評価した結果行なえるのが Array#find です。 実は Array クラスで include している Enumerable で定義されています。 each が定義されていれば、他のクラスでも使えちゃいます。
下のようなサンプルを見てましょう。
PLACE_NAME_OPTIONS = [
['トップページ', 'top'],
['ニュース', 'news'],
['私たちの活動', 'activities'],
['お知らせ', 'notices']
]
def real_place_name
option = PLACE_NAME_OPTIONS.find {|o| o[1] == place }
option ? option[0] : '不明'
end
findのブロック内のplaceはtop,news,activities,noticesが代入されます。ここでfindの振舞いはPLACE_NAME_OPTIONSの各要素とplaceで代入される値を比較して、同値のオブジェクトがあったら、その同値の配列をoptionに代入します。
つまり、find(|item| …)は
ブロックの返り値が初めて真になったときのitemを返します。
例えば、placeにtopが代入されていれば、optionには['トップページ', 'top']が代入されます。
ちなみにもう一つ、今使用しているサンプル本の中に下記のようなソースがあってなんだこりゃ?と思った箇所がありました。一応、未来の自分のためにそこでつまづいてたよ><ってことを残しておきます。
@sets_expired_at = [true, 1, '1'].include?(checked)
trueまたは数字の1または文字列の1がcheckedの中に含まれているならばsets_expired_atにcheckedに代入します、ですね。
- Comments: 0
- Trackbacks: 0
Rubyとxyzzy 二日目 後半
xyzzyで学んだこと
;;選択時はWindows風に
(load-library “winkey”)
;;全選択を C-a に割り当てる
(global-set-key #\C-a ’selection-whole-buffer)
Fn + ←(Home) ショートカットキーでのタブ移動
Ruby on Railsで学んだこと
ヘルパーの使い方
リンク先が現在のページと同じ場合(current_page?(item[:link]))や利用不可の場合(item[:disabled])はspan要素を作り、そうでなければlink_toメソッドでリンクを作る
ヘルパー側(app/helper/application_helper.rb)
# Methods added to this helper will be available to all templates in the application.
module ApplicationHelper
def menu_link_to(item)
if current_page?(item[:link])
'<span class="current_page">' + item[:name] + '</span>'
elsif item[:disabled]
'<span class="disabled">' + item[:name] + '(準備中)</span>'
else
link_to(item[:name], item[:link])
end
end
end
テンプレート側
<% menu_items = [
{ :link => { :controller => '/main', :action => 'index' },
:name => 'TOP' },
{ :link => { :controller => '/main', :action => 'activities' },
:name => '私たちの活動'},
{ :link => { :controller => '/main', :action => 'news'},
:name => 'ニュース' },
{ :link => { :controller => '/blog_entries', :action => 'index' },
:name => 'ブログ', :disabled => true },
{ :link => { :controller => '/members', :action => 'index' },
:name => '会員名簿', :disabled => true },
{ :link => { :controller => '/admin/main', :action => 'index' },
:name => '管理ページ', :disabled => true }
] -%>
<div id="menu_bar">
<% menu_items.each_with_index do |item, index| -%>
<% if index > 0 %> | <% end -%>
<%= menu_link_to item -%>
<% end -%>
</div>
今後やりたいこと
シンボルの意味がいまいちなので再度復習する
xyzzyのショートカットキーでのタブ移動
- Comments: 0
- Trackbacks: 0
Rubyとxyzzy 二日目 前半
xyzzyで学んだこと
ファイルを閉じる C-x k
次を検索/前を検索 F5/S-F5
コピー C-Insert
ペースト S-Insert
マウスだけでコピー・ペースト .xyzzyに追加
(defun mouse-right-press ()
(interactive)
(mouse-left-press)
(paste-from-clipboard))
(global-set-key #\LBtnUp ‘copy-selection-to-clipboard)
(global-set-key #\RBtnUp ‘mouse-right-press)
(global-set-key #\MBtnUp ‘mouse-menu-popup)
出所 http://chez-sugi.net/xyzzy/
rubyで学んだこと
Rubyではnumが0の場合はtrue(正しい)になります。また、空文字列「”」もtrueになります。
文字列の中に変数
puts "2かける3は#{2 * 3}です。" # 2かける3は6です。
name = "佐藤"
puts "#{name}さん、こんにちは。" # 佐藤さん、こんにちは。
インスタンス変数
「@」を付けた変数は、クラスのインスタンスごとに作られるインスタンス変数です。
class Book
def initialize(title, price) # 初期化
@title = title
@price = price
end
def put_data # 書名と価格の表示
puts "『#@title』、#@price円"
end
end
book1 = Book.new('こころ', 380) # 本のインスタンス1
book2 = Book.new('明暗', 700) # 本のインスタンス2
book1.put_data
book2.put_data
インスタンス変数@….を作っても、オブジェクトの外からはインスタンス変数にアクセスできません。アクセスしたい場合は変数と同名のメソッドを用意する必要があります。
つまり、ほかのプログラミング言語のメンバ変数やプロパティに当たるものはRubyにはなく、オブジェクトのデータにアクセスするにはメソッドを書かなければならないということです。
このような読み出しや書き込み用のメソッドをアクセサメソッドと呼び、アクセサメソッドでやり取りできるデータを属性と呼びます。Rubyの属性の実態は変数ではなくメソッドであることに注意しましょう。
class Book
def title # 書名の読み出し
@title
end
def title=(title) # 書名の書き込み
@title = title
end
end
book1 = Book.new
book1.title = '草枕'
puts book1.title # 草枕
Rubyにはもっと簡単な書き方が用意されています。attr_reader :titleと記述すると読み出し用メソッドが、attr_wrriter :titleと記述すると書き込み用メソッドが自動的に追加されます。
class Book
attr_reader :title
attr_writer :title
end
# 読み書き両方のメソッドを作りたいときは、attr_accessorを使います。
class Book
attr_accessor :title :price
end
class Book
attr_accessor :title, :price # 読み書きできる属性
def initialize(title, price)
@title = title
@price = price
end
end
book1 = Book.new('こころ', 380)
book2 = Book.new('明暗', 700)
book1.price = 420 # 価格を変更
puts "『#{book1.title}』、#{book1.price}円" # 『こころ』、420円
puts "『#{book2.title}』、#{book2.price}円" # 『明暗』、700円
- Comments: 0
- Trackbacks: 0
Home > Ruby Archive
- Search
- Feeds
- Meta