<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>My Blog</title>
	<atom:link href="http://maskop.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://maskop.wordpress.com</link>
	<description>Just another WordPress.com weblog</description>
	<lastBuildDate>Thu, 16 Apr 2009 10:47:50 +0000</lastBuildDate>
	<language>ru</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='maskop.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://s2.wp.com/i/buttonw-com.png</url>
		<title>My Blog</title>
		<link>http://maskop.wordpress.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://maskop.wordpress.com/osd.xml" title="My Blog" />
	<atom:link rel='hub' href='http://maskop.wordpress.com/?pushpress=hub'/>
		<item>
		<title>Шустрый сервер для Ruby приложений на Debian Lenny</title>
		<link>http://maskop.wordpress.com/2009/04/16/%d1%88%d1%83%d1%81%d1%82%d1%80%d1%8b%d0%b9-%d1%81%d0%b5%d1%80%d0%b2%d0%b5%d1%80-%d0%b4%d0%bb%d1%8f-ruby/</link>
		<comments>http://maskop.wordpress.com/2009/04/16/%d1%88%d1%83%d1%81%d1%82%d1%80%d1%8b%d0%b9-%d1%81%d0%b5%d1%80%d0%b2%d0%b5%d1%80-%d0%b4%d0%bb%d1%8f-ruby/#comments</comments>
		<pubDate>Thu, 16 Apr 2009 10:47:50 +0000</pubDate>
		<dc:creator>maskop</dc:creator>
				<category><![CDATA[Root]]></category>
		<category><![CDATA[nginx]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[server]]></category>
		<category><![CDATA[thin]]></category>

		<guid isPermaLink="false">http://maskop.wordpress.com/?p=11</guid>
		<description><![CDATA[Целью данного руководства является построить быстрый production-сервер на базе Lenny с использованием Nginx и Thin. Несмотря на обилие подобных мануалов, в процессе пришлось собирать информацию по кусочкам, поэтому возникло логическое желание собрать все в одном месте. Меньше слов, больше дела: Итак, начнем с инструментов: apt-get install build-essential libssl-dev libreadline5-dev zlib1g-dev Вся эта тарабарщина попросит отъесть [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=maskop.wordpress.com&amp;blog=6807694&amp;post=11&amp;subd=maskop&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Целью данного руководства является построить быстрый production-сервер на базе Lenny с использованием Nginx и Thin. Несмотря на обилие подобных мануалов, в процессе пришлось собирать информацию по кусочкам, поэтому возникло логическое желание собрать все в одном месте. Меньше слов, больше дела:<br />
<span id="more-11"></span><br />
<a name="habracut"></a>Итак, начнем с инструментов:<br />
<code>apt-get install build-essential libssl-dev libreadline5-dev zlib1g-dev</code><br />
Вся эта тарабарщина попросит отъесть около 101метра, подтверждаем.</p>
<p>Сам руби будем собирать из сырцов, так мы немного выиграем в производительности и много в стабильности.</p>
<p>Создаем папку install в домашнем каталоге, переходим в нее и качаем ruby<br />
<code>wget ftp://ftp.ruby-lang.org/pub/ruby/1.8/ruby-1.8.6.tar.gz</code><br />
и наблюдаем мультики про приключения белой стрелочки <img src='http://s0.wp.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /><br />
В принципе можно попробовать версию поновее, но после танцев с бубнами на тестовом сервере я решил что несолидно ставить unstable-версии на боевой сервер.<br />
Распаковываем:<br />
<code>tar xzf ruby-1.8.6.tar.gz<br />
cd ruby-1.8.6</code><br />
и три волшебные команды:<br />
<code>./configure<br />
make<br />
make install</code><br />
Если все хорошо, то команда:<br />
<code>ruby -v</code><br />
должна выдать что-то вроде «ruby 1.8.6 (2007-03-13 patchlevel 0) [i686-linux]»</p>
<p>Все хорошо? Тогда возращаемся в папку install, качаем и распаковываем rubygems:<br />
<code>wget <a href="http://rubyforge.org/frs/download.php/45905/rubygems-1.3.1.tgz">rubyforge.org/frs/download.php/45905/rubygems-1.3.1.tgz</a><br />
tar xzvf rubygems-1.3.1.tgz</code><br />
затем переходим в распакованную директорию и инсталлим:<br />
<code>ruby setup.rb</code></p>
<p>Здесь сделаю маленькое отступление для тех кто-то решит все-таки поставить 1.8.7 и наткнется на ошибку с версией (не помню как она звучит, но обязательно наткнетесь)<br />
просто закомментируйте в файле rubygems-1.3.1/lib/rubygems.rb строку 675 (version &lt;&lt; &laquo;.#{RUBY_PATCHLEVEL}&raquo; if defined? RUBY_PATCHLEVEL) так как константа RUBY_PATCHLEVEL в dev-версиях содержит значение -1.</p>
<p>В случае удачной установки команда:<br />
<code>gem -v</code><br />
радостно выдаст нам «1.3.1»<br />
и нам остается лишь проинсталлить thin:<br />
<code>gem install thin</code><br />
и проверить его командой thin с ключом -v<br />
Боевой руби к службе готов!</p>
<p>Теперь переходим к установке nginx, для начала возвратимся к нашей любимой директории install и качаем:<br />
<code>wget <a href="http://sysoev.ru/nginx/nginx-0.6.35.tar.gz">sysoev.ru/nginx/nginx-0.6.35.tar.gz</a><br />
tar xzvf nginx-0.6.35.tar.gz<br />
cd nginx-0.6.35</code><br />
Перед тем как собирать все это дело, установим PCRE, иначе не соберется:<br />
<code>apt-get install libpcre3-dev</code><br />
сконфигурим:<br />
<code>./configure --sbin-path=/usr/local/sbin --with-http_ssl_module</code><br />
и добьем:<br />
<code>make<br />
make install</code><br />
Затем идем по адресу <a href="http://gist.github.com/54030">gist.github.com/54030</a> и располагаем сие чудо скриптостроения в /etc/init.d/ под именем nginx и делаем его исполняемым:<br />
<code>chmod +x /etc/init.d/nginx</code></p>
<p>Перед запуском Nginx нужно настроить, для увеличения производительности мы будем использовать UNIX-сокеты, для этого редактируем файл /usr/local/nginx/conf/nginx.conf приблизительно следующим образом (все делается в секции http):</p>
<p><code>upstream test {<br />
server unix:/var/test.thin.0.sock;<br />
server unix:/var/test.thin.1.sock;<br />
} </code><br />
Это наш тестовый апстрим, здесь я использовал два воркера, на деле же все упирается в количество доступной вам памяти и здравый смысл.</p>
<p>Далее создаем подсекцию (я не знаю как это правильно называется) server которая отвечает за наш виртуальный хост:<br />
<code>server {<br />
listen 80; #слушаем порт 80<br />
server_name <a href="http://www.example.org/">www.example.org</a> example.org; #здесь доменное имя нашего сервера</p>
<p>proxy_next_upstream error;<br />
proxy_set_header X-Real-IP $remote_addr;<br />
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;<br />
proxy_redirect false;</p>
<p>location / {<br />
root /var/www/example.org/public; #корневая директория, отсюда будут братся реально существующие файлы.</p>
<p>#если запрашивают реальный файл, отдаем его<br />
if (-f $request_filename) {<br />
break;<br />
}</p>
<p>#файла не существует — передаем обработку thin<br />
if (!-f $request_filename) {<br />
proxy_pass <a href="http://test/;">test;</a> #здесь, после http:// указываем имя нужного апстрима<br />
break;<br />
}<br />
}<br />
}<br />
</code><br />
После запуска nginx обращение к сайту выдаст ошибку «This site is temporary unavailable», ну или что-то типа того… Почему? Ах да, мы же не запустили Thin! Давайте сделаем это:<br />
<code>thin start -S /var/test.thin.sock -c /var/www/example.org/ -a 127.0.0.1 -d<br />
</code><br />
Естественно это сработает только если в директории /var/www/example.org/ уже создано Rails/Merb/Sinatra/etc приложение.<br />
Жмем релоад в браузере и наслаждаемся!</p>
<p>Оригинал статьи лежит <a href="http://habrahabr.ru/blogs/sysadm/56000/"> тут </a></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/maskop.wordpress.com/11/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/maskop.wordpress.com/11/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/maskop.wordpress.com/11/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/maskop.wordpress.com/11/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/maskop.wordpress.com/11/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/maskop.wordpress.com/11/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/maskop.wordpress.com/11/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/maskop.wordpress.com/11/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/maskop.wordpress.com/11/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/maskop.wordpress.com/11/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/maskop.wordpress.com/11/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/maskop.wordpress.com/11/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/maskop.wordpress.com/11/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/maskop.wordpress.com/11/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=maskop.wordpress.com&amp;blog=6807694&amp;post=11&amp;subd=maskop&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://maskop.wordpress.com/2009/04/16/%d1%88%d1%83%d1%81%d1%82%d1%80%d1%8b%d0%b9-%d1%81%d0%b5%d1%80%d0%b2%d0%b5%d1%80-%d0%b4%d0%bb%d1%8f-ruby/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/a30e19177fe070b1ff175185d9541748?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">maskop</media:title>
		</media:content>
	</item>
		<item>
		<title>Интирессные ссылки</title>
		<link>http://maskop.wordpress.com/2009/03/04/links/</link>
		<comments>http://maskop.wordpress.com/2009/03/04/links/#comments</comments>
		<pubDate>Wed, 04 Mar 2009 08:29:23 +0000</pubDate>
		<dc:creator>maskop</dc:creator>
				<category><![CDATA[Root]]></category>

		<guid isPermaLink="false">http://maskop.wordpress.com/?p=8</guid>
		<description><![CDATA[Тут я планирую собирать линки на разные забавные статейки<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=maskop.wordpress.com&amp;blog=6807694&amp;post=8&amp;subd=maskop&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Тут я планирую собирать линки на разные забавные статейки</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/maskop.wordpress.com/8/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/maskop.wordpress.com/8/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/maskop.wordpress.com/8/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/maskop.wordpress.com/8/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/maskop.wordpress.com/8/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/maskop.wordpress.com/8/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/maskop.wordpress.com/8/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/maskop.wordpress.com/8/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/maskop.wordpress.com/8/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/maskop.wordpress.com/8/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/maskop.wordpress.com/8/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/maskop.wordpress.com/8/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/maskop.wordpress.com/8/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/maskop.wordpress.com/8/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=maskop.wordpress.com&amp;blog=6807694&amp;post=8&amp;subd=maskop&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://maskop.wordpress.com/2009/03/04/links/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/a30e19177fe070b1ff175185d9541748?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">maskop</media:title>
		</media:content>
	</item>
		<item>
		<title>Авторизация в Ruby on Rails с помощью плагина restful-authentication</title>
		<link>http://maskop.wordpress.com/2009/03/03/ruby-on-rails-restful-authentica/</link>
		<comments>http://maskop.wordpress.com/2009/03/03/ruby-on-rails-restful-authentica/#comments</comments>
		<pubDate>Tue, 03 Mar 2009 09:55:10 +0000</pubDate>
		<dc:creator>maskop</dc:creator>
				<category><![CDATA[Root]]></category>

		<guid isPermaLink="false">http://maskop.wordpress.com/?p=3</guid>
		<description><![CDATA[Сидя в Москве (как тут у вас многолюдно , нашел время на написание серии статей по Rails. Сегодняшняя тема навеяна печальным сообщением. Итак моя задача: показать как можно легко сделать авторизацию в Ruby on Rails. Задача новичков прочитать и попробовать, задача не новичков прочитать и написать как сделать лучше и/или указать на ошибки. Использованные инструменты: [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=maskop.wordpress.com&amp;blog=6807694&amp;post=3&amp;subd=maskop&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Сидя в Москве (как тут у вас многолюдно <img src='http://s0.wp.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> , нашел время на написание серии статей по Rails.<br />
Сегодняшняя тема навеяна <a href="http://forum.vingrad.ru/forum/topic-249533/anchor-entry1799679/0.html">печальным сообщением</a>. Итак моя задача: показать как можно легко сделать авторизацию в Ruby on Rails. Задача новичков прочитать и попробовать, задача не новичков прочитать и написать как сделать лучше и/или указать на ошибки.<br />
<span id="more-3"></span> <a name="habracut"></a><br />
Использованные инструменты:</p>
<ul>
<li>Ruby 1.8.6</li>
<li>Mac OS X 10.5.6</li>
<li>Rails 2.2.2</li>
<li>Mongrel 1.1.5</li>
<li>MySQL 5.0.51b</li>
</ul>
<p>Стандартные операции:</p>
<p><code>rails auth -d [любимая БД]<br />
cd auth<br />
rm public/index.html<br />
[отредактировать config/database.yml]<br />
rake db:create<br />
</code><br />
Для авторизации в RoR существует куча плагинов. Я буду использовать <a href="http://github.com/technoweenie/restful-authentication/tree/master">restful-authentication</a>.<br />
Установка достаточно стандартна:</p>
<p><code>script/plugin install git://github.com/technoweenie/restful-authentication.git<br />
</code><br />
Теперь нужно создать модель пользователя, в которой будет храниться логин пароль и другие пользователь-related данные. Так же понадобиться два контроллера. Один для регистрации, а другой для логина/логаута. Пусть модель пользователя будет user, а контроллер для логина логаута sessions, тогда выполнив такую команду:</p>
<p><code>script/generate authenticated user sessions<br />
</code><br />
плагин все сделает за нас. У этого генератора есть несколько опций, например &#8211;include-activation, которая добавит активацию пользователя по e-mail. За более подробной информацией рекомендую обратиться к документации.<br />
Генератор создаст два контроллера users и sessions, модель user, миграцию для модели user, записи в config/routes.rb и пару виюх которые скорей всего вы сразу же замените своими.<br />
Роуты выглядят следующим образом:</p>
<blockquote><p><code><span style="color:black;"><a href="http://s-c.me/1056/s">Copy Source</a> | <a href="http://s-c.me/1056/h">Copy HTML</a><br />
<span style="color:#cc6633;">ActionController::Routing</span>::Routes.draw <span style="color:#0000ff;">do</span> |map|<br />
map.logout <span style="color:#008000;">'/logout'</span>, :controller =&gt; <span style="color:#008000;">'sessions'</span>, :action =&gt; <span style="color:#008000;">'destroy'</span><br />
map.login <span style="color:#008000;">'/login'</span>, :controller =&gt; <span style="color:#008000;">'sessions'</span>, :action =&gt; <span style="color:#008000;">'new'</span><br />
map.register <span style="color:#008000;">'/register'</span>, :controller =&gt; <span style="color:#008000;">'users'</span>, :action =&gt; <span style="color:#008000;">'create'</span><br />
map.signup <span style="color:#008000;">'/signup'</span>, :controller =&gt; <span style="color:#008000;">'users'</span>, :action =&gt; <span style="color:#008000;">'new'</span><br />
map.resources :users<br />
map.resource :session<br />
<span style="color:#0000ff;">end</span><br />
</span></code></p></blockquote>
<p>Как видно все довольно хорошо вписывается в REST:</p>
<p><code>sessions/new [GET] форма логина<br />
sessions [POST] авторизация<br />
sessions [DELETE] logout<br />
users/new [GET] форма регистрации<br />
users [POST] регистрация<br />
</code><br />
Я рекомендую с помощью опций роутов(введенных не так давно, не помню с какой версии) <img src='http://s1.wp.com/wp-includes/images/smilies/icon_surprised.gif' alt=':o' class='wp-smiley' /> nly и :except, отредактировать запись map.resources :users (map.resources :users, :except =&gt; [:edit, :update, :destroy], for example). Например редактирование лучше перенести в отдельный роут: map.resource :profile, (редактирование в таком случае будет выглядить так: /profile/edit), так как скорей всего в вашем приложении одни пользователи других редактировать не должны.<br />
Посмотрим на модель app/models/user.rb:</p>
<blockquote><p><code><span style="color:black;"><a href="http://s-c.me/1057/s">Copy Source</a> | <a href="http://s-c.me/1057/h">Copy HTML</a><br />
<span style="color:#0000ff;">require</span> <span style="color:#008000;">'digest/sha1'</span></span></code></p>
<p><span style="color:#0000ff;">class</span> <span style="color:#cc6633;">User</span> &lt; <span style="color:#cc6633;">ActiveRecord::Base</span><br />
<span style="color:#0000ff;">include</span> Authentication<br />
<span style="color:#0000ff;">include</span> Authentication::ByPassword<br />
<span style="color:#0000ff;">include</span> Authentication::ByCookieToken</p>
<p>validates_presence_of :<span style="color:#cc6633;">login</span><br />
validates_length_of :<span style="color:#cc6633;">login</span>, :within =&gt; <span style="color:#008000;">3</span>..<span style="color:#008000;">40</span><br />
validates_uniqueness_of :<span style="color:#cc6633;">login</span><br />
validates_format_of :<span style="color:#cc6633;">login</span>, :with =&gt; Authentication.login_regex, :message =&gt; Authentication.bad_login_message</p>
<p>validates_format_of :name, :with =&gt; Authentication.name_regex, :message =&gt; Authentication.bad_name_message, :allow_nil =&gt; <span style="color:#0000ff;">true</span><br />
validates_length_of :name, :maximum =&gt; <span style="color:#008000;">100</span></p>
<p>validates_presence_of :<span style="color:#cc6633;">email</span><br />
validates_length_of :<span style="color:#cc6633;">email</span>, :within =&gt; <span style="color:#008000;">6</span>..<span style="color:#008000;">100</span><br />
validates_uniqueness_of :<span style="color:#cc6633;">email</span><br />
validates_format_of :<span style="color:#cc6633;">email</span>, :with =&gt; Authentication.email_regex, :message =&gt; Authentication.bad_email_message</p>
<p>attr_accessible :<span style="color:#cc6633;">login</span>, :<span style="color:#cc6633;">email</span>, :name, :password, :password_confirmation</p>
<p><span style="color:#0000ff;">def self</span>.authenticate(<span style="color:#cc6633;">login</span>, password)<br />
<span style="color:#0000ff;">return nil if</span> <span style="color:#cc6633;">login</span>.blank? || password.blank?<br />
u = find_by_login(<span style="color:#cc6633;">login</span>.downcase) <span style="color:#696969;"># need to get the salt</span><br />
u &amp;&amp; u.authenticated?(password) ? u : <span style="color:#0000ff;">nil</span><br />
<span style="color:#0000ff;">end</span></p>
<p><span style="color:#0000ff;">def</span> <span style="color:#cc6633;">login</span>=(value)<br />
write_attribute :<span style="color:#cc6633;">login</span>, (value ? value.downcase : <span style="color:#0000ff;">nil</span>)<br />
<span style="color:#0000ff;">end</span></p>
<p><span style="color:#0000ff;">def</span> <span style="color:#cc6633;">email</span>=(value)<br />
write_attribute :<span style="color:#cc6633;">email</span>, (value ? value.downcase : <span style="color:#0000ff;">nil</span>)<br />
<span style="color:#0000ff;">end</span><br />
<span style="color:#0000ff;">end</span></p></blockquote>
<p>В принципе ничего интересного разве что, мне не совсем нравится, что логином выступает не e-mail. Чтобы это поправить нужно сдеать следующее: удалить из миграции db/migrate/xxxx_users.rb запись t.column :login, :string, :limit =&gt; 40. Модель пользователя сделать такой:</p>
<blockquote><p><code><span style="color:black;"><a href="http://s-c.me/1058/s">Copy Source</a> | <a href="http://s-c.me/1058/h">Copy HTML</a><br />
<span style="color:#0000ff;">require</span> <span style="color:#008000;">'digest/sha1'</span></span></code></p>
<p><span style="color:#0000ff;">class</span> <span style="color:#cc6633;">User</span> &lt; <span style="color:#cc6633;">ActiveRecord::Base</span><br />
<span style="color:#0000ff;">include</span> Authentication<br />
<span style="color:#0000ff;">include</span> Authentication::ByPassword<br />
<span style="color:#0000ff;">include</span> Authentication::ByCookieToken</p>
<p>validates_format_of :name, :with =&gt; Authentication.name_regex, :message =&gt; Authentication.bad_name_message, :allow_nil =&gt; <span style="color:#0000ff;">true</span><br />
validates_length_of :name, :maximum =&gt; <span style="color:#008000;">100</span></p>
<p>validates_presence_of :<span style="color:#cc6633;">email</span><br />
validates_length_of :<span style="color:#cc6633;">email</span>, :within =&gt; <span style="color:#008000;">6</span>..<span style="color:#008000;">100</span><br />
validates_uniqueness_of :<span style="color:#cc6633;">email</span><br />
validates_format_of :<span style="color:#cc6633;">email</span>, :with =&gt; Authentication.email_regex, :message =&gt; Authentication.bad_email_message</p>
<p>attr_accessible :<span style="color:#cc6633;">email</span>, :name, :password, :password_confirmation</p>
<p><span style="color:#0000ff;">def self</span>.authenticate(login, password)<br />
<span style="color:#0000ff;">return nil if</span> login.blank? || password.blank?<br />
u = find_by_email(login.downcase) <span style="color:#696969;"># need to get the salt</span><br />
u &amp;&amp; u.authenticated?(password) ? u : <span style="color:#0000ff;">nil</span><br />
<span style="color:#0000ff;">end</span></p>
<p><span style="color:#0000ff;">def</span> <span style="color:#cc6633;">email</span>=(value)<br />
write_attribute :<span style="color:#cc6633;">email</span>, (value ? value.downcase : <span style="color:#0000ff;">nil</span>)<br />
<span style="color:#0000ff;">end</span><br />
<span style="color:#0000ff;">end</span></p></blockquote>
<p>Файл app/views/users/new.html.erb тоже придеться изменить:</p>
<blockquote><p><code><span style="color:black;"><span style="color:#0000ff;">&lt;</span><span style="color:#800000;">h1</span><span style="color:#0000ff;">&gt;</span>Sign up as a new user<span style="color:#0000ff;">&lt;/</span><span style="color:#800000;">h1</span><span style="color:#0000ff;">&gt;</span><br />
<span>&lt;%</span> @user.password = @user.password_confirmation = nil <span>%&gt;</span></span></code></p>
<p><span>&lt;%</span>= error_messages_for :user <span>%&gt;</span><br />
<span>&lt;%</span> form_for :user, :url =&gt; users_path <span style="color:#0000ff;">do</span> |f| -<span>%&gt;</span></p>
<p><span style="color:#0000ff;">&lt;</span><span style="color:#800000;">p</span><span style="color:#0000ff;">&gt;</span><span>&lt;%</span>= label_tag <span style="color:#a31515;">&#8216;email&#8217;</span> <span>%&gt;</span><span style="color:#0000ff;">&lt;</span><span style="color:#800000;">br</span><span style="color:#0000ff;">/&gt;</span><br />
<span>&lt;%</span>= f.text_field :email <span>%&gt;</span><span style="color:#0000ff;">&lt;/</span><span style="color:#800000;">p</span><span style="color:#0000ff;">&gt;</span></p>
<p><span style="color:#0000ff;">&lt;</span><span style="color:#800000;">p</span><span style="color:#0000ff;">&gt;</span><span>&lt;%</span>= label_tag <span style="color:#a31515;">&#8216;password&#8217;</span> <span>%&gt;</span><span style="color:#0000ff;">&lt;</span><span style="color:#800000;">br</span><span style="color:#0000ff;">/&gt;</span><br />
<span>&lt;%</span>= f.password_field :password <span>%&gt;</span><span style="color:#0000ff;">&lt;/</span><span style="color:#800000;">p</span><span style="color:#0000ff;">&gt;</span></p>
<p><span style="color:#0000ff;">&lt;</span><span style="color:#800000;">p</span><span style="color:#0000ff;">&gt;</span><span>&lt;%</span>= label_tag <span style="color:#a31515;">&#8216;password_confirmation&#8217;</span>, <span style="color:#a31515;">&#8216;Confirm Password&#8217;</span> <span>%&gt;</span><span style="color:#0000ff;">&lt;</span><span style="color:#800000;">br</span><span style="color:#0000ff;">/&gt;</span><br />
<span>&lt;%</span>= f.password_field :password_confirmation <span>%&gt;</span><span style="color:#0000ff;">&lt;/</span><span style="color:#800000;">p</span><span style="color:#0000ff;">&gt;</span></p>
<p><span style="color:#0000ff;">&lt;</span><span style="color:#800000;">p</span><span style="color:#0000ff;">&gt;</span><span>&lt;%</span>= label_tag <span style="color:#a31515;">&#8216;name&#8217;</span> <span>%&gt;</span><span style="color:#0000ff;">&lt;</span><span style="color:#800000;">br</span><span style="color:#0000ff;">/&gt;</span><br />
<span>&lt;%</span>= f.text_field :name <span>%&gt;</span><span style="color:#0000ff;">&lt;/</span><span style="color:#800000;">p</span><span style="color:#0000ff;">&gt;</span></p>
<p><span style="color:#0000ff;">&lt;</span><span style="color:#800000;">p</span><span style="color:#0000ff;">&gt;</span><span>&lt;%</span>= submit_tag <span style="color:#a31515;">&#8216;Sign up&#8217;</span> <span>%&gt;</span><span style="color:#0000ff;">&lt;/</span><span style="color:#800000;">p</span><span style="color:#0000ff;">&gt;</span><br />
<span>&lt;%</span> end -<span>%&gt;</span></p>
<p><span style="color:gray;">* This source code was highlighted with <a href="http://virtser.net/blog/post/source-code-highlighter.aspx"><span style="color:gray;">Source Code Highlighter</span></a>.</span></p></blockquote>
<p>Все готово! Осталось выполнить миграции и запустить проект.<br />
Для полноты можно добавить рутовый роут. Генерация рутового контроллера:</p>
<p><code>script/generate controller home index<br />
</code><br />
в config/routes.rb добавить:</p>
<p><code>map.root :controller =&gt; 'home'<br />
</code><br />
Добавить лайтаут (app/views/layouts/application.html.erb):</p>
<blockquote><p><code><span style="color:black;"><span style="color:#0000ff;">&lt;</span><span style="color:#800000;">html</span><span style="color:#0000ff;">&gt;</span><br />
<span style="color:#0000ff;">&lt;</span><span style="color:#800000;">head</span><span style="color:#0000ff;">&gt;</span><br />
<span style="color:#0000ff;">&lt;</span><span style="color:#800000;">meta</span> <span style="color:#ff0000;">http-equiv</span><span style="color:#0000ff;">="Content-type"</span> <span style="color:#ff0000;">content</span><span style="color:#0000ff;">="text/html; charset=utf-8"</span> <span style="color:#0000ff;">/&gt;</span><br />
<span style="color:#0000ff;">&lt;</span><span style="color:#800000;">title</span><span style="color:#0000ff;">&gt;</span>auth demo<span style="color:#0000ff;">&lt;/</span><span style="color:#800000;">title</span><span style="color:#0000ff;">&gt;</span><br />
<span style="color:#0000ff;">&lt;/</span><span style="color:#800000;">head</span><span style="color:#0000ff;">&gt;</span><br />
<span style="color:#0000ff;">&lt;</span><span style="color:#800000;">body</span><span style="color:#0000ff;">&gt;</span><br />
<span>&lt;%</span>= render :<span style="color:#0000ff;">partial</span> =&gt; <span style="color:#a31515;">'users/user_bar'</span> <span>%&gt;</span><br />
<span>&lt;%</span>= <span style="color:#0000ff;">yield</span> <span>%&gt;</span><br />
<span style="color:#0000ff;">&lt;/</span><span style="color:#800000;">body</span><span style="color:#0000ff;">&gt;</span><br />
<span style="color:#0000ff;">&lt;/</span><span style="color:#800000;">html</span><span style="color:#0000ff;">&gt;</span></span></code></p>
<p><span style="color:gray;">* This source code was highlighted with <a href="http://virtser.net/blog/post/source-code-highlighter.aspx"><span style="color:gray;">Source Code Highlighter</span></a>.</span></p></blockquote>
<p>Некоторые пояснения. В контроллере/виюхе «залогиненность» нужно проверять функцией logged_in? (true/false) доступ к пользователю который сейчай авторизован осуществляется через current_user. <a href="http://rghost.ru/135127">Готовый проект</a>, в котором есть несколько исправлений не отраженных в статье.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/maskop.wordpress.com/3/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/maskop.wordpress.com/3/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/maskop.wordpress.com/3/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/maskop.wordpress.com/3/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/maskop.wordpress.com/3/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/maskop.wordpress.com/3/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/maskop.wordpress.com/3/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/maskop.wordpress.com/3/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/maskop.wordpress.com/3/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/maskop.wordpress.com/3/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/maskop.wordpress.com/3/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/maskop.wordpress.com/3/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/maskop.wordpress.com/3/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/maskop.wordpress.com/3/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=maskop.wordpress.com&amp;blog=6807694&amp;post=3&amp;subd=maskop&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://maskop.wordpress.com/2009/03/03/ruby-on-rails-restful-authentica/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/a30e19177fe070b1ff175185d9541748?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">maskop</media:title>
		</media:content>
	</item>
	</channel>
</rss>
