<?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/"
	>

<channel>
	<title>по стопам webkill&#039;а &#187; ROR</title>
	<atom:link href="http://blog.lukmus.ru/tag/ror/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.lukmus.ru</link>
	<description>это наш химический дом для печальных жителей Земли</description>
	<lastBuildDate>Sat, 21 Oct 2023 19:10:13 +0000</lastBuildDate>
	<language>ru-RU</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.4.2</generator>
		<item>
		<title>ROR 3. Devise. Управление пользователями</title>
		<link>http://blog.lukmus.ru/2012/03/23/ror-3-devise-upravlenie-polzovatelyami/</link>
		<comments>http://blog.lukmus.ru/2012/03/23/ror-3-devise-upravlenie-polzovatelyami/#comments</comments>
		<pubDate>Fri, 23 Mar 2012 06:21:06 +0000</pubDate>
		<dc:creator>lukmus</dc:creator>
				<category><![CDATA[ruby & ruby on rails]]></category>
		<category><![CDATA[devise]]></category>
		<category><![CDATA[ROR]]></category>
		<category><![CDATA[ROR 3]]></category>
		<category><![CDATA[ruby on rails 3]]></category>
		<category><![CDATA[user]]></category>
		<category><![CDATA[управление пользователями]]></category>

		<guid isPermaLink="false">http://blog.lukmus.ru/?p=1265</guid>
		<description><![CDATA[Сейчас мало таких сайтов, где не нужны были бы пользователи, точнее модель пользователей. Раньше, я как дурак, писал эту модель вручную, иногда, конечно, иначе и нельзя было поступить. А недавно я открыл для себя гем Devise для Rails, который в большинстве случаев избавляет от необходимости прописывать логику управления пользователями самому. Все, что я опишу дальше [...]]]></description>
			<content:encoded><![CDATA[<p>Сейчас мало таких сайтов, где не нужны были бы пользователи, точнее модель пользователей. Раньше, я как дурак, писал эту модель вручную, иногда, конечно, иначе и нельзя было поступить. А недавно я открыл для себя гем <a rel="nofollow" href="https://github.com/plataformatec/devise" target="_blank">Devise</a> для Rails, который в большинстве случаев избавляет от необходимости прописывать логику управления пользователями самому.<br />
<img class="aligncenter size-full wp-image-1267" title="berlin" src="http://blog.lukmus.ru/wp-content/uploads/2012/03/berlin.png" alt="" width="517" height="323" /><span id="more-1265"></span>Все, что я опишу дальше есть как на офстранице гема, так и в этих видео (русская версия Railscasts):</p>
<ol>
<li><a title="начало работы с devise" href="http://vimeo.com/14698174" target="_blank" rel="nofollow" >введение в devise</a></li>
<li><a href="http://vimeo.com/15056344" target="_blank" rel="nofollow" >настройка devise</a></li>
</ol>
<p>Все нижепроделанное относиться к RoR версии выше 3.0.1.</p>
<h2>установка</h2>
<p>Сначала, как обычно, дописываем в <code>Gemfile</code>:</p>

<div class="wp_syntax"><table><tr><td class="code"><pre class="" style="font-family:monospace;">gem 'devise'</pre></td></tr></table></div>

<p>и далее опять же:</p>

<div class="wp_syntax"><table><tr><td class="code"><pre class="" style="font-family:monospace;">bundle install</pre></td></tr></table></div>

<p>Теперь надо сгенерировать/интегрировать/спарить/инсталировать/и т.д. rails-приложение и devise:</p>

<div class="wp_syntax"><table><tr><td class="code"><pre class="" style="font-family:monospace;">rails generate devise:install</pre></td></tr></table></div>

<p>После этого devise напишет мол надо настроить mailer и домашнюю страницу (<code>root_url</code>). Для режима development настроить mailer можно прописав в <code>config/environments/development.rb</code> опцию:</p>

<div class="wp_syntax"><table><tr><td class="code"><pre class="ruby" style="font-family:monospace;">config.<span style="color:#9900CC;">action_mailer</span>.<span style="color:#9900CC;">default_url_options</span> =<span style="color:#006600; font-weight:bold;">&#123;</span> <span style="color:#ff3333; font-weight:bold;">:host</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#996600;">'localhost:3000'</span> <span style="color:#006600; font-weight:bold;">&#125;</span></pre></td></tr></table></div>

<p>Далее надо сгенерировать модель пользователей для Devise и выполнить созданные миграции:</p>

<div class="wp_syntax"><table><tr><td class="code"><pre class="" style="font-family:monospace;">rails generate devise User
rake db:migrate</pre></td></tr></table></div>

<h2>настройка и эксплуатация</h2>
<h3>маршрутизация</h3>
<p>После установки devise пропишет свои особые маршруты. Строка в <code>config/routes.rb</code> вида:</p>

<div class="wp_syntax"><table><tr><td class="code"><pre class="ruby" style="font-family:monospace;">devise_for <span style="color:#ff3333; font-weight:bold;">:users</span></pre></td></tr></table></div>

<p>мало о чем скажет, поэтому посмотреть маршруты devise можно так:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
</pre></td><td class="code"><pre class="bash" style="font-family:monospace;">rake routes
        new_user_session GET    <span style="color: #000000; font-weight: bold;">/</span>users<span style="color: #000000; font-weight: bold;">/</span>sign_in<span style="color: #7a0874; font-weight: bold;">&#40;</span>.:format<span style="color: #7a0874; font-weight: bold;">&#41;</span>
            user_session POST   <span style="color: #000000; font-weight: bold;">/</span>users<span style="color: #000000; font-weight: bold;">/</span>sign_in<span style="color: #7a0874; font-weight: bold;">&#40;</span>.:format<span style="color: #7a0874; font-weight: bold;">&#41;</span>
    destroy_user_session DELETE <span style="color: #000000; font-weight: bold;">/</span>users<span style="color: #000000; font-weight: bold;">/</span>sign_out<span style="color: #7a0874; font-weight: bold;">&#40;</span>.:format<span style="color: #7a0874; font-weight: bold;">&#41;</span>
           user_password POST   <span style="color: #000000; font-weight: bold;">/</span>users<span style="color: #000000; font-weight: bold;">/</span>password<span style="color: #7a0874; font-weight: bold;">&#40;</span>.:format<span style="color: #7a0874; font-weight: bold;">&#41;</span>
       new_user_password GET    <span style="color: #000000; font-weight: bold;">/</span>users<span style="color: #000000; font-weight: bold;">/</span>password<span style="color: #000000; font-weight: bold;">/</span>new<span style="color: #7a0874; font-weight: bold;">&#40;</span>.:format<span style="color: #7a0874; font-weight: bold;">&#41;</span>
      edit_user_password GET    <span style="color: #000000; font-weight: bold;">/</span>users<span style="color: #000000; font-weight: bold;">/</span>password<span style="color: #000000; font-weight: bold;">/</span>edit<span style="color: #7a0874; font-weight: bold;">&#40;</span>.:format<span style="color: #7a0874; font-weight: bold;">&#41;</span>
                         PUT    <span style="color: #000000; font-weight: bold;">/</span>users<span style="color: #000000; font-weight: bold;">/</span>password<span style="color: #7a0874; font-weight: bold;">&#40;</span>.:format<span style="color: #7a0874; font-weight: bold;">&#41;</span>
cancel_user_registration GET    <span style="color: #000000; font-weight: bold;">/</span>users<span style="color: #000000; font-weight: bold;">/</span>cancel<span style="color: #7a0874; font-weight: bold;">&#40;</span>.:format<span style="color: #7a0874; font-weight: bold;">&#41;</span>
       user_registration POST   <span style="color: #000000; font-weight: bold;">/</span><span style="color: #c20cb9; font-weight: bold;">users</span><span style="color: #7a0874; font-weight: bold;">&#40;</span>.:format<span style="color: #7a0874; font-weight: bold;">&#41;</span>
   new_user_registration GET    <span style="color: #000000; font-weight: bold;">/</span>users<span style="color: #000000; font-weight: bold;">/</span>sign_up<span style="color: #7a0874; font-weight: bold;">&#40;</span>.:format<span style="color: #7a0874; font-weight: bold;">&#41;</span>
  edit_user_registration GET    <span style="color: #000000; font-weight: bold;">/</span>users<span style="color: #000000; font-weight: bold;">/</span>edit<span style="color: #7a0874; font-weight: bold;">&#40;</span>.:format<span style="color: #7a0874; font-weight: bold;">&#41;</span>
                         PUT    <span style="color: #000000; font-weight: bold;">/</span><span style="color: #c20cb9; font-weight: bold;">users</span><span style="color: #7a0874; font-weight: bold;">&#40;</span>.:format<span style="color: #7a0874; font-weight: bold;">&#41;</span>
                         DELETE <span style="color: #000000; font-weight: bold;">/</span><span style="color: #c20cb9; font-weight: bold;">users</span><span style="color: #7a0874; font-weight: bold;">&#40;</span>.:format<span style="color: #7a0874; font-weight: bold;">&#41;</span>
...</pre></td></tr></table></div>

<p>Соответственно в представлении, например, ссылка на регистрацию будет выглядеть как:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
</pre></td><td class="code"><pre class="rails" style="font-family:monospace;"><span style="color:#006600; font-weight:bold;">&lt;%</span>=<span style="color:#5A0A0A; font-weight:bold;">link_to</span> <span style="color:#996600;">'Регистрация'</span>, new_user_registration_path <span style="color:#006600; font-weight:bold;">%&gt;</span></pre></td></tr></table></div>

<p>а на вход:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
</pre></td><td class="code"><pre class="rails" style="font-family:monospace;"><span style="color:#006600; font-weight:bold;">&lt;%</span>=<span style="color:#5A0A0A; font-weight:bold;">link_to</span> <span style="color:#996600;">'Войти'</span>, new_user_session_path<span style="color:#006600; font-weight:bold;">%&gt;</span></pre></td></tr></table></div>

<p>Стандартные пути можно изменить подкорректировав <code>config/routes.rb</code>, используя опцию <code>path_names</code>, например, для изменения пути регистрации изменения будут выглядеть так:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
</pre></td><td class="code"><pre class="ruby" style="font-family:monospace;">devise_for <span style="color:#ff3333; font-weight:bold;">:users</span>, <span style="color:#ff3333; font-weight:bold;">:path_names</span><span style="color:#006600; font-weight:bold;">=&gt;</span><span style="color:#006600; font-weight:bold;">&#123;</span>sign_up: <span style="color:#996600;">'register'</span><span style="color:#006600; font-weight:bold;">&#125;</span></pre></td></tr></table></div>

<h3>методы</h3>
<p>Также в первом видео еще рассказали метод, как узнать авторизован ли пользователь:</p>

<div class="wp_syntax"><table><tr><td class="code"><pre class="" style="font-family:monospace;">user_signed_in?</pre></td></tr></table></div>

<p>и, видимо, экземпляр класса модели User для текущего пользователя <code>current_user</code>, которая работает также как и экземпляр любой другой модели, например, узнать E-mail текущего авторизованного пользователя можно так:</p>

<div class="wp_syntax"><table><tr><td class="code"><pre class="ruby" style="font-family:monospace;">current_user.<span style="color:#9900CC;">email</span></pre></td></tr></table></div>

<h3>фильтр</h3>
<p>Еще один важный момент в начале второго видео про before_filter. Чтобы узнать недопустить неавторизованного посетителя до экшенов, нужно использовать фильтр:</p>

<div class="wp_syntax"><table><tr><td class="code"><pre class="ruby" style="font-family:monospace;">before_filter <span style="color:#ff3333; font-weight:bold;">:authenticate_user</span>!</pre></td></tr></table></div>

<p>Он будет перенаправлять на страницу входа.</p>
<h3>настройка представлений</h3>
<p>Для того, чтобы иметь возможность редактировать представления devise их нужно привести к обычному виду файлов представлений:</p>

<div class="wp_syntax"><table><tr><td class="code"><pre class="bash" style="font-family:monospace;">rails g devise:views
      create  app<span style="color: #000000; font-weight: bold;">/</span>views<span style="color: #000000; font-weight: bold;">/</span>devise<span style="color: #000000; font-weight: bold;">/</span>_links.erb
      invoke  form_for
      create    app<span style="color: #000000; font-weight: bold;">/</span>views<span style="color: #000000; font-weight: bold;">/</span>devise<span style="color: #000000; font-weight: bold;">/</span>confirmations
      create    app<span style="color: #000000; font-weight: bold;">/</span>views<span style="color: #000000; font-weight: bold;">/</span>devise<span style="color: #000000; font-weight: bold;">/</span>confirmations<span style="color: #000000; font-weight: bold;">/</span>new.html.erb
      create    app<span style="color: #000000; font-weight: bold;">/</span>views<span style="color: #000000; font-weight: bold;">/</span>devise<span style="color: #000000; font-weight: bold;">/</span>passwords
      create    app<span style="color: #000000; font-weight: bold;">/</span>views<span style="color: #000000; font-weight: bold;">/</span>devise<span style="color: #000000; font-weight: bold;">/</span>passwords<span style="color: #000000; font-weight: bold;">/</span>edit.html.erb
      create    app<span style="color: #000000; font-weight: bold;">/</span>views<span style="color: #000000; font-weight: bold;">/</span>devise<span style="color: #000000; font-weight: bold;">/</span>passwords<span style="color: #000000; font-weight: bold;">/</span>new.html.erb
      create    app<span style="color: #000000; font-weight: bold;">/</span>views<span style="color: #000000; font-weight: bold;">/</span>devise<span style="color: #000000; font-weight: bold;">/</span>registrations
      create    app<span style="color: #000000; font-weight: bold;">/</span>views<span style="color: #000000; font-weight: bold;">/</span>devise<span style="color: #000000; font-weight: bold;">/</span>registrations<span style="color: #000000; font-weight: bold;">/</span>edit.html.erb
      create    app<span style="color: #000000; font-weight: bold;">/</span>views<span style="color: #000000; font-weight: bold;">/</span>devise<span style="color: #000000; font-weight: bold;">/</span>registrations<span style="color: #000000; font-weight: bold;">/</span>new.html.erb
      create    app<span style="color: #000000; font-weight: bold;">/</span>views<span style="color: #000000; font-weight: bold;">/</span>devise<span style="color: #000000; font-weight: bold;">/</span>sessions
      create    app<span style="color: #000000; font-weight: bold;">/</span>views<span style="color: #000000; font-weight: bold;">/</span>devise<span style="color: #000000; font-weight: bold;">/</span>sessions<span style="color: #000000; font-weight: bold;">/</span>new.html.erb
      create    app<span style="color: #000000; font-weight: bold;">/</span>views<span style="color: #000000; font-weight: bold;">/</span>devise<span style="color: #000000; font-weight: bold;">/</span>unlocks
      create    app<span style="color: #000000; font-weight: bold;">/</span>views<span style="color: #000000; font-weight: bold;">/</span>devise<span style="color: #000000; font-weight: bold;">/</span>unlocks<span style="color: #000000; font-weight: bold;">/</span>new.html.erb
      invoke  erb
      create    app<span style="color: #000000; font-weight: bold;">/</span>views<span style="color: #000000; font-weight: bold;">/</span>devise<span style="color: #000000; font-weight: bold;">/</span>mailer
      create    app<span style="color: #000000; font-weight: bold;">/</span>views<span style="color: #000000; font-weight: bold;">/</span>devise<span style="color: #000000; font-weight: bold;">/</span>mailer<span style="color: #000000; font-weight: bold;">/</span>confirmation_instructions.html.erb
      create    app<span style="color: #000000; font-weight: bold;">/</span>views<span style="color: #000000; font-weight: bold;">/</span>devise<span style="color: #000000; font-weight: bold;">/</span>mailer<span style="color: #000000; font-weight: bold;">/</span>reset_password_instructions.html.erb
      create    app<span style="color: #000000; font-weight: bold;">/</span>views<span style="color: #000000; font-weight: bold;">/</span>devise<span style="color: #000000; font-weight: bold;">/</span>mailer<span style="color: #000000; font-weight: bold;">/</span>unlock_instructions.html.erb</pre></td></tr></table></div>

<h3>сообщения об ошибках</h3>
<p>Все сообщения devise храняться в YML-файлах локалей, по умолчанию это <code>config/locales/devise.en.yml</code>. Для добавления своей локали нужно создать файл с аналогичным именем, например, <code>config/locales/devise.ru.yml</code>.<br />
Скачать переведенные на другие языки (в т.ч. русский) локали devise можно тут: <a rel="nofollow" href="https://github.com/plataformatec/devise/wiki/I18n" target="_blank">https://github.com/plataformatec/devise/wiki/I18n</a></p>
<h3>валидация и прочие настройки</h3>
<p>Настройки валидации, как и все остальные для этого гема, находятся в <code>config/initializers/devise.rb</code>. Отключить стандартную валидацию devise можно убрав модуль <code>:validatable</code> из модели, в данном случае <code>User</code>.<br />
А вообще в devise вагон других настроек, например, теже ключи аутентификации, а которых говорят в конце второго видео, настраиваются все в том же <code>config/initializers/devise.rb</code>.<br />
Подробнее о настройках и прочих заморочках этого гема:</p>
<ol>
<li> <a href="https://github.com/plataformatec/devise" target="_blank" rel="nofollow" >офстраница</a></li>
<li> <a href="https://github.com/plataformatec/devise/wiki" target="_blank" rel="nofollow" >вики</a></li>
<li> <a href="http://rubydoc.info/github/plataformatec/devise/master/frames" target="_blank" rel="nofollow" >rubydoc</a></li>
</ol>
<p><meta property="og:image" content="http://blog.lukmus.ru/wp-content/uploads/2012/03/berlin.png" /></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.lukmus.ru/2012/03/23/ror-3-devise-upravlenie-polzovatelyami/feed/</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
		<item>
		<title>rails 3. переход с sqlite3 на mysql</title>
		<link>http://blog.lukmus.ru/2011/10/24/rails-3-perehod-s-sqlite3-na-mysql/</link>
		<comments>http://blog.lukmus.ru/2011/10/24/rails-3-perehod-s-sqlite3-na-mysql/#comments</comments>
		<pubDate>Mon, 24 Oct 2011 02:03:45 +0000</pubDate>
		<dc:creator>lukmus</dc:creator>
				<category><![CDATA[ruby & ruby on rails]]></category>
		<category><![CDATA[fedora]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[rake]]></category>
		<category><![CDATA[ROR]]></category>
		<category><![CDATA[ROR 3]]></category>
		<category><![CDATA[ruby on rails 3]]></category>
		<category><![CDATA[sqlite]]></category>
		<category><![CDATA[yaml_db]]></category>

		<guid isPermaLink="false">http://blog.lukmus.ru/?p=1089</guid>
		<description><![CDATA[Существует гипотеза, что MySQL гораздо быстрее SQLite в многопользовательском приложении. Собственно, гипотеза подтверждается на всех тестах, что я видел, а также на моем собственном опыте. Подобный холивар, о том у кого длинее что быстрее можно слегкостью найти на Хабре. Весь описанный дальше процесс был проделан на Fedora 14.1 x64, однако, даю клык, что все тоже [...]]]></description>
			<content:encoded><![CDATA[<p>Существует гипотеза, что MySQL гораздо быстрее SQLite в многопользовательском приложении. Собственно, гипотеза подтверждается на всех тестах, что я видел, а также на моем собственном опыте. Подобный холивар, о том <span style="text-decoration: line-through;">у кого длинее</span> что быстрее можно слегкостью найти на Хабре. Весь описанный дальше процесс был проделан на Fedora 14.1 x64, однако, даю клык, что все тоже самое будет работать на федоре старше 11.<br />
<img class="aligncenter size-full wp-image-1090" title="post-3714-1248825341" src="http://blog.lukmus.ru/wp-content/uploads/2011/10/post-3714-1248825341.jpg" alt="" width="517" height="555" /><span id="more-1089"></span><br />
Далее я буду описывать все в том порядке, в каком делаю это я. Также я считаю, что именно такой порядок наиболее удобен для миграции с SQLite3 на MySQL.</p>
<h2>экспорт БД с sqlite3</h2>
<p>Прежде всего надо как-то сдампить старую БД на SQLite и хотелось бы это сделать без писания дополнительных скриптов. Для этого делаем нижеизложенное.<br />
Закидываем в Gemfile следующую строку:</p>

<div class="wp_syntax"><table><tr><td class="code"><pre class="" style="font-family:monospace;">gem 'yaml_db'</pre></td></tr></table></div>

<p>И далее установим этот гем через bundle:</p>

<div class="wp_syntax"><table><tr><td class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #666666;"># </span><span style="color: #7a0874; font-weight: bold;">cd</span> rails_app <span style="color: #000000; font-weight: bold;">&amp;&amp;</span> bundle <span style="color: #c20cb9; font-weight: bold;">install</span></pre></td></tr></table></div>

<p>Этот гем даст некоторые новые rake&#8217;и для работы с БД:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
</pre></td><td class="code"><pre class="bash" style="font-family:monospace;">$ rake <span style="color: #660033;">-T</span>
...
rake db:create          <span style="color: #666666; font-style: italic;"># Create the database from ...</span>
rake db:data:dump       <span style="color: #666666; font-style: italic;"># Dump contents of database ...</span>
rake db:data:dump_dir   <span style="color: #666666; font-style: italic;"># Dump contents of database ...</span>
rake db:data:load       <span style="color: #666666; font-style: italic;"># Load contents of db/data...</span>
rake db:data:load_dir   <span style="color: #666666; font-style: italic;"># Load contents of db/data_dir ...</span>
rake db:drop            <span style="color: #666666; font-style: italic;"># Drops the database for the ...</span>
rake db:dump            <span style="color: #666666; font-style: italic;"># Dump schema and data to db/...</span>
rake db:fixtures:load   <span style="color: #666666; font-style: italic;"># Load fixtures into the current...</span>
rake db:load            <span style="color: #666666; font-style: italic;"># Load schema and data from ...</span>
rake db:migrate         <span style="color: #666666; font-style: italic;"># Migrate the database (options:...</span>
rake db:migrate:status  <span style="color: #666666; font-style: italic;"># Display status of migrations</span>
rake db:rollback        <span style="color: #666666; font-style: italic;"># Rolls the schema back to ...</span>
rake db:schema:dump     <span style="color: #666666; font-style: italic;"># Create a db/schema.rb file ...</span>
rake db:schema:load     <span style="color: #666666; font-style: italic;"># Load a schema.rb file into...</span>
rake db:seed            <span style="color: #666666; font-style: italic;"># Load the seed data from...</span>
rake db:setup           <span style="color: #666666; font-style: italic;"># Create the database, load...</span>
rake db:structure:dump  <span style="color: #666666; font-style: italic;"># Dump the database structure...</span>
rake db:version
...</pre></td></tr></table></div>

<p>Далее нижеприведенной командой экспортируем схему и содержание БД в <code>db/data.yml</code>.</p>

<div class="wp_syntax"><table><tr><td class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #666666;">$ </span>rake db:dump</pre></td></tr></table></div>

<p>Если БД слишком разрослась, можно попробывать вариант с <code>rake db:data:dump_dir</code>.</p>
<h2>поднимаем и настраиваем MySQL</h2>
<h3>MySQL</h3>
<p>Сразу же устанавливаем пакеты:</p>

<div class="wp_syntax"><table><tr><td class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #666666;"># </span><span style="color: #c20cb9; font-weight: bold;">yum install</span> mysql mysql-server mysql-devel ruby-mysql <span style="color: #660033;">-y</span></pre></td></tr></table></div>

<p>Далее прописываем во все тот же <code>Gemfile</code>:</p>

<div class="wp_syntax"><table><tr><td class="code"><pre class="" style="font-family:monospace;">gem 'mysql2'</pre></td></tr></table></div>

<p>И опять бандлим:</p>

<div class="wp_syntax"><table><tr><td class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #666666;"># </span>bundle <span style="color: #c20cb9; font-weight: bold;">install</span></pre></td></tr></table></div>

<p>Стартуем сервер MySQL.</p>

<div class="wp_syntax"><table><tr><td class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #666666;"># </span>service mysqld start</pre></td></tr></table></div>

<p>Заходим под рутом в MySQL:</p>

<div class="wp_syntax"><table><tr><td class="code"><pre class="bash" style="font-family:monospace;">mysql <span style="color: #660033;">-uroot</span> <span style="color: #660033;">-p</span></pre></td></tr></table></div>

<p>Если до этого руту был задан пароль, то его надо будет ввести, если это первый заход рута, то пароль пустой.<br />
А теперь создаем базу</p>

<div class="wp_syntax"><table><tr><td class="code"><pre class="mysql" style="font-family:monospace;">mysql<span style="color: #CC0099;">&gt;</span> <span style="color: #990099; font-weight: bold;">CREATE</span> <span style="color: #990099; font-weight: bold;">DATABASE</span> railsdb CHARACTER <span style="color: #990099; font-weight: bold;">SET</span> utf8 <span style="color: #CC0099; font-weight: bold;">COLLATE</span> utf8_general_ci<span style="color: #000033;">;</span></pre></td></tr></table></div>

<p>и пользователя, попутно назначая ему права на эту БД.</p>

<div class="wp_syntax"><table><tr><td class="code"><pre class="mysql" style="font-family:monospace;">mysql<span style="color: #CC0099;">&gt;</span> <span style="color: #990099; font-weight: bold;">GRANT</span> <span style="color: #990099; font-weight: bold;">ALL</span> <span style="color: #990099; font-weight: bold;">PRIVILEGES</span> <span style="color: #990099; font-weight: bold;">ON</span> railsdb.<span style="color: #CC0099;">*</span> <span style="color: #990099; font-weight: bold;">TO</span> <span style="color: #008000;">'railsuser'</span>@<span style="color: #008000;">'localhost'</span> IDENTIFIED BY <span style="color: #008000;">'railspass'</span> <span style="color: #990099; font-weight: bold;">WITH</span> <span style="color: #990099; font-weight: bold;">GRANT</span> <span style="color: #990099; font-weight: bold;">OPTION</span><span style="color: #000033;">;</span></pre></td></tr></table></div>

<p>Команда выше дает права пользователю <code>railsuser</code> с паролем <code>railspass</code> на полный доступ к БД <code>railsdb</code> c локального хоста. Подробнее о правах и как их назначить читаем на <a rel="nofollow" href="http://dev.mysql.com/doc/" target="_blank">оффсайте</a>.</p>
<h3>настройка rails-приложения</h3>
<p>Открываем config/database.yml и заменяем настройки БД нужной секции на подобные (в моем случае это development):</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
</pre></td><td class="code"><pre class="yml" style="font-family:monospace;">development:
  adapter: mysql2
  encoding: utf8
  reconnect: false
  database: railsdb
  pool: 5
  username: railsuser
  password: railspass
  host: localhost</pre></td></tr></table></div>

<p>Хочу предупредить, что табуляция перед параметрами, видимо, очень важна т.к. без этих табов сервер не стартанул, а с ними запустился на ура.<br />
Теперь импортируем схему и данные в БД.</p>

<div class="wp_syntax"><table><tr><td class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #666666;">$ </span>rake db:load</pre></td></tr></table></div>

<p>Стоит помнить, что команда загрузки дампа может быть и немного иной, все зависит от того какую команду экспорта дампа выбирали вы в на первом шаге этого поста. Ну вот и все.<br />
<meta property="og:image" content="http://blog.lukmus.ru/wp-content/uploads/2011/10/post-3714-1248825341.jpg" /></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.lukmus.ru/2011/10/24/rails-3-perehod-s-sqlite3-na-mysql/feed/</wfw:commentRss>
		<slash:comments>12</slash:comments>
		</item>
		<item>
		<title>ROR + Passenger + Apache</title>
		<link>http://blog.lukmus.ru/2011/02/12/ror-passenger-apache/</link>
		<comments>http://blog.lukmus.ru/2011/02/12/ror-passenger-apache/#comments</comments>
		<pubDate>Sat, 12 Feb 2011 08:38:21 +0000</pubDate>
		<dc:creator>lukmus</dc:creator>
				<category><![CDATA[ruby & ruby on rails]]></category>
		<category><![CDATA[настройка и установка]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[gem]]></category>
		<category><![CDATA[httpd]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[passenger]]></category>
		<category><![CDATA[ROR]]></category>
		<category><![CDATA[ROR 3]]></category>
		<category><![CDATA[ruby on rails 3]]></category>
		<category><![CDATA[selinux]]></category>

		<guid isPermaLink="false">http://blog.lukmus.ru/?p=942</guid>
		<description><![CDATA[После того как рельсовое приложение более-менее готово для его коммерческой эксплуатации необходимо перейти с Webrick&#8217;а на более серьезный сервер. Лично на данный момент выбрал Apache, поэтому и запишу процесс настройки ROR + Apache. Для начала нужно установить сам Apache. В RH-линуксах это делается так: 1 yum install httpd Для полноценности apache&#8217;а можно еще установить PHP: [...]]]></description>
			<content:encoded><![CDATA[<p>После того как рельсовое приложение более-менее готово для его коммерческой эксплуатации необходимо перейти с Webrick&#8217;а на более серьезный сервер. Лично на данный момент выбрал Apache, поэтому и запишу процесс настройки ROR + Apache.<br />
<a href="http://blog.lukmus.ru/wp-content/uploads/2011/02/aor.png"><img class="aligncenter size-full wp-image-943" title="aor" src="http://blog.lukmus.ru/wp-content/uploads/2011/02/aor.png" alt="" width="517" height="424" /></a><span id="more-942"></span>Для начала нужно установить сам Apache. В RH-линуксах это делается так:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
</pre></td><td class="code"><pre class="php" style="font-family:monospace;">yum install httpd</pre></td></tr></table></div>

<p>Для полноценности apache&#8217;а можно еще установить PHP:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
</pre></td><td class="code"><pre class="php" style="font-family:monospace;">yum install php</pre></td></tr></table></div>

<p>Но я бы этого не делал, на всякий случай, чтобы не один web-shell там не работал т.к. я не видел вебшеллов под unix&#8217;ы кроме как на PHP и CGI Perl.</p>
<h2>установка passenger</h2>
<p>Далее нужно установить такую штуку как Passenger. Этот gem поможет связать Apache с ROR&#8217;ом. Оффициальная инструкция установки Passenger есть тут &#8211; <a rel="nofollow" href="http://" target="_blank">http://wiki.rubyonrails.org/deployment/apache-passenger</a>. В принципе до определенного момента я буду ей следовать.<br />
Устанавливаем сам гем:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
</pre></td><td class="code"><pre class="php" style="font-family:monospace;"><span style="color: #666666; font-style: italic;"># gem install passenger</span></pre></td></tr></table></div>

<p>Запускаем скрипт:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
</pre></td><td class="code"><pre class="php" style="font-family:monospace;"><span style="color: #666666; font-style: italic;"># passenger-install-apache2-module</span></pre></td></tr></table></div>

<p>Здесь скрипт скажет что нужно и что из этого у вас уже установлено. Если что-то не установлено он подскажет как установить, если же все уже есть, то установиться модуль к апачу. В случае если вам придется что-то доустановить, не забудьте после этого опять запустить этот скрипт.</p>
<h2>настройка apache</h2>
<p>Теперь самое сложное &#8211; надо настроить апач. Отворяем <code>/etc/httpd/httpd.conf</code> и колдуем.<br />
В подгружаемые модули дописываем, то что порекомендовал скрипт passenger&#8217;а:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
</pre></td><td class="code"><pre class="php" style="font-family:monospace;"><span style="color: #339933;">...</span>bla<span style="color: #339933;">-</span>bla<span style="color: #339933;">-</span>bla<span style="color: #339933;">...</span>
LoadModule disk_cache_module modules<span style="color: #339933;">/</span>mod_disk_cache<span style="color: #339933;">.</span>so
LoadModule cgi_module modules<span style="color: #339933;">/</span>mod_cgi<span style="color: #339933;">.</span>so
&nbsp;
<span style="color: #339933;">&lt;</span>span style<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;color: #3366ff;&quot;</span><span style="color: #339933;">&gt;</span>LoadModule passenger_module <span style="color: #339933;">/</span>usr<span style="color: #339933;">/</span>local<span style="color: #339933;">/</span>lib<span style="color: #339933;">/</span>ruby<span style="color: #339933;">/</span>gems<span style="color: #339933;">/</span>1<span style="color: #339933;">.</span>9<span style="color: #339933;">.</span>1
<span style="color: #339933;">/</span>gems<span style="color: #339933;">/</span>passenger<span style="color: #339933;">-</span>3<span style="color: #339933;">.</span>0<span style="color: #339933;">.</span>2<span style="color: #339933;">/</span>ext<span style="color: #339933;">/</span>apache2<span style="color: #339933;">/</span>mod_passenger<span style="color: #339933;">.</span>so
PassengerRoot <span style="color: #339933;">/</span>usr<span style="color: #339933;">/</span>local<span style="color: #339933;">/</span>lib<span style="color: #339933;">/</span>ruby<span style="color: #339933;">/</span>gems<span style="color: #339933;">/</span>1<span style="color: #339933;">.</span>9<span style="color: #339933;">.</span>1<span style="color: #339933;">/</span>gems
<span style="color: #339933;">/</span>passenger<span style="color: #339933;">-</span>3<span style="color: #339933;">.</span>0<span style="color: #339933;">.</span>2
PassengerRuby <span style="color: #339933;">/</span>usr<span style="color: #339933;">/</span>local<span style="color: #339933;">/</span>bin<span style="color: #339933;">/</span>ruby
<span style="color: #339933;">&lt;/</span>span<span style="color: #339933;">&gt;&lt;</span>span style<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;color: #0000ff;&quot;</span><span style="color: #339933;">&gt;</span>PassengerDefaultUser root<span style="color: #339933;">&lt;/</span>span<span style="color: #339933;">&gt;</span></pre></td></tr></table></div>

<p>Чтобы наверняка, можно дописать еще строку выделенную темносиним.</p>
<p>Далее надо будет поколдовать с директивой <code>NameVirtualHost</code>. Возможно она и не понадобиться, а быть может и поможет. Раскомментируйте ее:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
</pre></td><td class="code"><pre class="php" style="font-family:monospace;">NameVirtualHost <span style="color: #339933;">*:</span><span style="color: #cc66cc;">80</span></pre></td></tr></table></div>

<h3>настройка виртуального хостинга</h3>
<p>Для каждого сайта(домена) следует дописать в конец конфига что-то типа:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
</pre></td><td class="code"><pre class="php" style="font-family:monospace;"><span style="color: #339933;">&lt;</span>VirtualHost <span style="color: #339933;">*:</span><span style="color: #cc66cc;">80</span><span style="color: #339933;">&gt;</span>
    ServerName <span style="color: #339933;">&lt;</span>span style<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;color: #800080;&quot;</span><span style="color: #339933;">&gt;</span>mysuperrubyonrailsunderapachesite<span style="color: #339933;">.</span>ru
<span style="color: #339933;">&lt;/</span>span<span style="color: #339933;">&gt;</span>    ServerAlias <span style="color: #339933;">&lt;</span>span style<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;color: #800080;&quot;</span><span style="color: #339933;">&gt;</span>www<span style="color: #339933;">.</span>mysuperrubyonrailsunderapachesite<span style="color: #339933;">.</span>ru
<span style="color: #339933;">&lt;/</span>span<span style="color: #339933;">&gt;</span>    DocumentRoot <span style="color: #339933;">&lt;</span>span style<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;color: #3366ff;&quot;</span><span style="color: #339933;">&gt;/</span><span style="color: #000000; font-weight: bold;">var</span><span style="color: #339933;">/</span>www<span style="color: #339933;">/</span>rails<span style="color: #339933;">&lt;</span>strong<span style="color: #339933;">&gt;/</span>public<span style="color: #339933;">&lt;/</span>strong<span style="color: #339933;">&gt;&lt;/</span>span<span style="color: #339933;">&gt;</span>
    <span style="color: #339933;">&lt;</span>Directory <span style="color: #339933;">&lt;</span>span style<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;color: #3366ff;&quot;</span><span style="color: #339933;">&gt;/</span><span style="color: #000000; font-weight: bold;">var</span><span style="color: #339933;">/</span>www<span style="color: #339933;">/</span>rails<span style="color: #339933;">/&lt;/</span>span<span style="color: #339933;">&gt;&lt;</span>strong<span style="color: #339933;">&gt;&lt;</span>span style<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;color: #3366ff;&quot;</span><span style="color: #339933;">&gt;</span><span style="color: #000000; font-weight: bold;">public</span><span style="color: #339933;">/&lt;/</span>span<span style="color: #339933;">&gt;&lt;/</span>strong<span style="color: #339933;">&gt;&gt;</span>
        Allow from all
    <span style="color: #339933;">&lt;/</span>Directory<span style="color: #339933;">&gt;</span>
    RailsEnv development
    RailsBaseURI <span style="color: #339933;">/</span>
    ErrorLog logs<span style="color: #339933;">/</span>mysuperrubyonrailsunderapachesite<span style="color: #339933;">.</span>ru<span style="color: #339933;">.</span><span style="color: #990000;">log</span>
<span style="color: #339933;">&lt;/</span>VirtualHost<span style="color: #339933;">&gt;</span></pre></td></tr></table></div>

<div id="_mcePaste" style="position: absolute; left: -10000px; top: 1319px; width: 1px; height: 1px; overflow: hidden;">

<div class="wp_syntax"><table><tr><td class="code"><pre class="php" style="font-family:monospace;">mysuperrubyonrailsunderapachesite<span style="color: #339933;">.</span>ru</pre></td></tr></table></div>

</div>
<p>Эта конфа обозначает, что содержимое директории с рельсовым приложением лежит в <code>/var/www/rails</code>, а папка <code>public</code> &#8211; та самая публичная папка рельсов где лежат CSS, JS, картинки и прочее.</p>
<p>Внимательно посмотрите какие права у каталогов. Признаком нехватки прав у апача, помимо логов,  является <code>Apache Test Page</code>.<br />
Помните, что апач по умолчанию работает под ущербным пользователем <code>apache</code>, поэтому следует дать ему права на чтение и исполнение в каталоге <code>/var/www/rails/</code>.<br />
Вторая типовая, по крайне мере моя, ошибка проявляется в том случае если в  <code>/var/www/rails/</code> лежит не само рельсовое приложение а только ссылка на <code>public</code>. Здесь, если сами рельсы лежат допустим в <code>/home/username/rails</code>, даже если вы настроите права ко всем и всякому 0777 в браузере все равно может появиться Test Page. Виновником тому, например в RH-линуксах, может стать SELinux.<br />
Отключить SELinux можно установив значение параметра <code>SELINUX=disabled</code> в файле <code>/etc/selinux/config</code>, после чего надо перезагрузиться.</p>
<p>На этом грубая настройка Apache под Ruby on Rails закончена. Запускайте Apache как умеете, у меня, например, в Fedora это выглядит так:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
</pre></td><td class="code"><pre class="php" style="font-family:monospace;"><span style="color: #666666; font-style: italic;"># service httpd start</span></pre></td></tr></table></div>

<p>Не забудьте настроить iptables, выключить же его можно так:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
</pre></td><td class="code"><pre class="php" style="font-family:monospace;"><span style="color: #666666; font-style: italic;"># service iptables stop</span></pre></td></tr></table></div>

<p><meta property="og:image" content="http://blog.lukmus.ru/wp-content/uploads/2011/02/aor.png" /></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.lukmus.ru/2011/02/12/ror-passenger-apache/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>ROR 3. форма загрузки изображений</title>
		<link>http://blog.lukmus.ru/2010/12/09/ror-3-forma-zagruzki-izobrazheniy/</link>
		<comments>http://blog.lukmus.ru/2010/12/09/ror-3-forma-zagruzki-izobrazheniy/#comments</comments>
		<pubDate>Thu, 09 Dec 2010 13:55:30 +0000</pubDate>
		<dc:creator>lukmus</dc:creator>
				<category><![CDATA[ruby & ruby on rails]]></category>
		<category><![CDATA[form]]></category>
		<category><![CDATA[has_attached_file]]></category>
		<category><![CDATA[paperclip]]></category>
		<category><![CDATA[ROR]]></category>
		<category><![CDATA[ROR 3]]></category>
		<category><![CDATA[ruby on rails 3]]></category>
		<category><![CDATA[upload file]]></category>
		<category><![CDATA[загрузка файла]]></category>

		<guid isPermaLink="false">http://blog.lukmus.ru/?p=849</guid>
		<description><![CDATA[Этот пост не относиться к переводу офсайта рельсов. Это личный опыт. И здесь я расскажу как я делал форму с загрузкой картинок на ROR 3. установка плагина paperclip Этот плагин неимоверно облегчает работу с файлами, а точнее их загрузку из формы. Насколько я понил, в ROR 3 плагины устанавливаются не так как в предыдущих версиях, [...]]]></description>
			<content:encoded><![CDATA[<p>Этот пост не относиться к переводу офсайта рельсов. Это личный опыт.<br />
И здесь я расскажу как я делал форму с загрузкой картинок на ROR 3.</p>
<p><a href="http://blog.lukmus.ru/wp-content/uploads/2010/12/india_06.jpg"><img class="aligncenter size-full wp-image-850" title="india_06" src="http://blog.lukmus.ru/wp-content/uploads/2010/12/india_06.jpg" alt="" width="500" height="200" /></a><br />
<span id="more-849"></span></p>
<h3>установка плагина paperclip</h3>
<p>Этот плагин неимоверно облегчает работу с файлами, а точнее их загрузку из формы.</p>
<p>Насколько я понил, в ROR 3 плагины устанавливаются не так как в предыдущих версиях, соответсвенно в старых рельсах будет немного иначе. Ну а для ROR 3 вот так:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
</pre></td><td class="code"><pre class="php" style="font-family:monospace;">rails plugin install git<span style="color: #339933;">:</span><span style="color: #666666; font-style: italic;">//github.com/thoughtbot/paperclip</span></pre></td></tr></table></div>

<p>Подробнее о плагине можно прочитать <a href="https://github.com/thoughtbot/paperclip" target="_blank">здесь</a>, там же можно и прочитать инструкцию по плагину на английском, однако, для последнего ROR&#8217;а она немного устарела.</p>
<h3>настройка приложения</h3>
<h4>модель</h4>
<p>Открываем модель, того где нужна загрузка файлов и дописываем (здесь показано напримере модели User, где поле с загружаемой картинкой &#8211; avatar):</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
</pre></td><td class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">class</span> User <span style="color: #339933;">&lt;</span> ActiveRecord<span style="color: #339933;">::</span><span style="color: #004000;">Base</span>
    <span style="color: #339933;">&lt;</span>span style<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;color: #3366ff;&quot;</span><span style="color: #339933;">&gt;</span>has_attached_file<span style="color: #339933;">&lt;/</span>span<span style="color: #339933;">&gt;</span> <span style="color: #339933;">&lt;</span>strong<span style="color: #339933;">&gt;:</span>avatar<span style="color: #339933;">&lt;/</span>strong<span style="color: #339933;">&gt;,</span> 
    <span style="color: #339933;">&lt;</span>strong<span style="color: #339933;">&gt;:</span>styles<span style="color: #339933;">&lt;/</span>strong<span style="color: #339933;">&gt;</span> <span style="color: #339933;">=&gt;</span> <span style="color: #009900;">&#123;</span> <span style="color: #339933;">:</span>medium <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">&quot;300x300&gt;&quot;</span><span style="color: #339933;">,</span> <span style="color: #339933;">:</span>thumb <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">&quot;100x100&gt;&quot;</span> <span style="color: #009900;">&#125;</span>
  <span style="color: #990000;">end</span></pre></td></tr></table></div>

<p>Если вы вдруг решили что в БД должно быть поле <strong>:avatar</strong>, то оно не должно там быть. Все необходимые поля мы добавим дальше в миграции. Так что если вы сделали поле с таким именем (в данном случае :avatar), то удалите его миграцией.</p>
<h4>миграции</h4>
<p>Для добавления необходимых полей пишем миграции. И для начала создаем файл миграции (этот и другие способы читаем <a href="http://blog.lukmus.ru/?p=763" target="_blank">здесь</a>):</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
</pre></td><td class="code"><pre class="php" style="font-family:monospace;">rails generate migration AddAvatarColumnsToUser</pre></td></tr></table></div>

<p>и пишем в созданной миграции, опять же для модели <span style="color: #808000;"><code>User</code></span> с полем <code>:<span style="color: #ff6600;">avatar</span></code>:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
</pre></td><td class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">class</span> AddAvatarColumnsToUser <span style="color: #339933;">&lt;</span> ActiveRecord<span style="color: #339933;">::</span><span style="color: #004000;">Migration</span>
    def <span style="color: #000000; font-weight: bold;">self</span><span style="color: #339933;">.</span>up
      add_column <span style="color: #339933;">:&lt;</span>span style<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;color: #808000;&quot;</span><span style="color: #339933;">&gt;</span>users<span style="color: #339933;">&lt;/</span>span<span style="color: #339933;">&gt;,</span> <span style="color: #339933;">:&lt;</span>span style<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;color: #ff6600;&quot;</span><span style="color: #339933;">&gt;</span>avatar<span style="color: #339933;">&lt;/</span>span<span style="color: #339933;">&gt;</span>_file_name<span style="color: #339933;">,</span>    <span style="color: #339933;">:</span>string
      add_column <span style="color: #339933;">:&lt;</span>span style<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;color: #808000;&quot;</span><span style="color: #339933;">&gt;</span>users<span style="color: #339933;">&lt;/</span>span<span style="color: #339933;">&gt;,</span> <span style="color: #339933;">:&lt;</span>span style<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;color: #ff6600;&quot;</span><span style="color: #339933;">&gt;</span>avatar<span style="color: #339933;">&lt;/</span>span<span style="color: #339933;">&gt;</span>_content_type<span style="color: #339933;">,</span> <span style="color: #339933;">:</span>string
      add_column <span style="color: #339933;">:&lt;</span>span style<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;color: #808000;&quot;</span><span style="color: #339933;">&gt;</span>users<span style="color: #339933;">&lt;/</span>span<span style="color: #339933;">&gt;,</span> <span style="color: #339933;">:&lt;</span>span style<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;color: #ff6600;&quot;</span><span style="color: #339933;">&gt;</span>avatar<span style="color: #339933;">&lt;/</span>span<span style="color: #339933;">&gt;</span>_file_size<span style="color: #339933;">,</span>    <span style="color: #339933;">:</span>integer
      add_column <span style="color: #339933;">:&lt;</span>span style<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;color: #808000;&quot;</span><span style="color: #339933;">&gt;</span>users<span style="color: #339933;">&lt;/</span>span<span style="color: #339933;">&gt;,</span> <span style="color: #339933;">:&lt;</span>span style<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;color: #ff6600;&quot;</span><span style="color: #339933;">&gt;</span>avatar<span style="color: #339933;">&lt;/</span>span<span style="color: #339933;">&gt;</span>_updated_at<span style="color: #339933;">,</span>   <span style="color: #339933;">:</span>datetime
    <span style="color: #990000;">end</span>
&nbsp;
    def <span style="color: #000000; font-weight: bold;">self</span><span style="color: #339933;">.</span>down
      remove_column <span style="color: #339933;">:&lt;</span>span style<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;color: #808000;&quot;</span><span style="color: #339933;">&gt;</span>users<span style="color: #339933;">&lt;/</span>span<span style="color: #339933;">&gt;,</span> <span style="color: #339933;">:&lt;</span>span style<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;color: #ff6600;&quot;</span><span style="color: #339933;">&gt;</span>avatar<span style="color: #339933;">&lt;/</span>span<span style="color: #339933;">&gt;</span>_file_name
      remove_column <span style="color: #339933;">:&lt;</span>span style<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;color: #808000;&quot;</span><span style="color: #339933;">&gt;</span>users<span style="color: #339933;">&lt;/</span>span<span style="color: #339933;">&gt;,</span> <span style="color: #339933;">:&lt;</span>span style<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;color: #ff6600;&quot;</span><span style="color: #339933;">&gt;</span>avatar<span style="color: #339933;">&lt;/</span>span<span style="color: #339933;">&gt;</span>_content_type
      remove_column <span style="color: #339933;">:&lt;</span>span style<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;color: #808000;&quot;</span><span style="color: #339933;">&gt;</span>users<span style="color: #339933;">&lt;/</span>span<span style="color: #339933;">&gt;,</span> <span style="color: #339933;">:&lt;</span>span style<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;color: #ff6600;&quot;</span><span style="color: #339933;">&gt;</span>avatar<span style="color: #339933;">&lt;/</span>span<span style="color: #339933;">&gt;</span>_file_size
      remove_column <span style="color: #339933;">:&lt;</span>span style<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;color: #808000;&quot;</span><span style="color: #339933;">&gt;</span>users<span style="color: #339933;">&lt;/</span>span<span style="color: #339933;">&gt;,</span> <span style="color: #339933;">:&lt;</span>span style<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;color: #ff6600;&quot;</span><span style="color: #339933;">&gt;</span>avatar<span style="color: #339933;">&lt;/</span>span<span style="color: #339933;">&gt;</span>_updated_at
    <span style="color: #990000;">end</span>
  <span style="color: #990000;">end</span></pre></td></tr></table></div>

<h4>представления</h4>
<p>И здесь нужно сделать немного не так как в руководстве. Открываем частицу (partial) формы (<code>_form.html.erb</code>) и исправляем помощника (helper) <code>form_for</code>:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
</pre></td><td class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;%</span> form_for<span style="color: #009900;">&#40;</span><span style="color: #339933;">@</span>user<span style="color: #339933;">,</span> <span style="color: #339933;">:</span><span style="color: #b1b100;">as</span><span style="color: #339933;">=&gt;:</span>user<span style="color: #339933;">,</span> <span style="color: #339933;">:</span>url <span style="color: #339933;">=&gt;</span> user_path<span style="color: #339933;">,</span>
<span style="color: #339933;">:</span>html <span style="color: #339933;">=&gt;</span> <span style="color: #009900;">&#123;</span> <span style="color: #339933;">:</span>multipart <span style="color: #339933;">=&gt;</span> <span style="color: #009900; font-weight: bold;">true</span> <span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">do</span> <span style="color: #339933;">|</span>f<span style="color: #339933;">|</span> <span style="color: #000000; font-weight: bold;">%&gt;</span></pre></td></tr></table></div>

<p>и в самой форме, где уже должно сверкать это поле с загрузкой файла пишем помощника (helper):</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
</pre></td><td class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;%=</span> form<span style="color: #339933;">.</span>file_field <span style="color: #339933;">:</span>avatar <span style="color: #000000; font-weight: bold;">%&gt;</span></pre></td></tr></table></div>

<p>А в представлениях, где нужно отображать картинки пишем, например, так:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
</pre></td><td class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;%=</span> image_tag <span style="color: #339933;">@</span>user<span style="color: #339933;">.</span>avatar<span style="color: #339933;">.</span>url <span style="color: #000000; font-weight: bold;">%&gt;</span>
  <span style="color: #000000; font-weight: bold;">&lt;%=</span> image_tag <span style="color: #339933;">@</span>user<span style="color: #339933;">.</span>avatar<span style="color: #339933;">.</span>url<span style="color: #009900;">&#40;</span><span style="color: #339933;">:</span>medium<span style="color: #009900;">&#41;</span> <span style="color: #000000; font-weight: bold;">%&gt;</span>
  <span style="color: #000000; font-weight: bold;">&lt;%=</span> image_tag <span style="color: #339933;">@</span>user<span style="color: #339933;">.</span>avatar<span style="color: #339933;">.</span>url<span style="color: #009900;">&#40;</span><span style="color: #339933;">:</span>thumb<span style="color: #009900;">&#41;</span> <span style="color: #000000; font-weight: bold;">%&gt;</span></pre></td></tr></table></div>

<h4>контроллер</h4>
<p>Открываем контроллер нашей модели и добавляем в метод <code>create</code> (в случае если этого там нет):</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
</pre></td><td class="code"><pre class="php" style="font-family:monospace;"> def create
    <span style="color: #339933;">...</span>
    <span style="color: #339933;">&lt;</span>span style<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;color: #666699;&quot;</span><span style="color: #339933;">&gt;&lt;</span>strong<span style="color: #339933;">&gt;@</span>user<span style="color: #339933;">&lt;/</span>strong<span style="color: #339933;">&gt;</span> <span style="color: #339933;">=</span> User<span style="color: #339933;">.</span>create<span style="color: #009900;">&#40;</span> params<span style="color: #009900;">&#91;</span><span style="color: #339933;">&lt;</span>strong<span style="color: #339933;">&gt;:</span>user<span style="color: #339933;">&lt;/</span>strong<span style="color: #339933;">&gt;</span><span style="color: #009900;">&#93;</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">&lt;/</span>span<span style="color: #339933;">&gt;</span>
    <span style="color: #339933;">...</span>
 <span style="color: #990000;">end</span></pre></td></tr></table></div>

<h4>директории</h4>
<p>Теперь создаем директорию system и даем в ней права на запись:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
</pre></td><td class="code"><pre class="php" style="font-family:monospace;"><span style="color: #990000;">mkdir</span> <span style="color: #000000; font-weight: bold;">public</span><span style="color: #339933;">/</span><span style="color: #990000;">system</span> <span style="color: #339933;">&amp;&amp;</span> <span style="color: #990000;">chmod</span> a<span style="color: #339933;">+</span>w <span style="color: #000000; font-weight: bold;">public</span><span style="color: #339933;">/</span><span style="color: #990000;">system</span></pre></td></tr></table></div>

<p>Все. Теперь файлы будут грузится в <code>public/system/&lt;имя поля (avatar)&gt;/&lt;вариант картинки/файла&gt;/&lt;имя файла&gt;</code>.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.lukmus.ru/2010/12/09/ror-3-forma-zagruzki-izobrazheniy/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
	</channel>
</rss>
