<?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; CarrierWave</title>
	<atom:link href="http://blog.lukmus.ru/tag/carrierwave/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>Яндекс.Фотки+Carrierwave на Rails 3</title>
		<link>http://blog.lukmus.ru/2012/06/14/yandeks-fotkicarrierwave-na-rails-3/</link>
		<comments>http://blog.lukmus.ru/2012/06/14/yandeks-fotkicarrierwave-na-rails-3/#comments</comments>
		<pubDate>Thu, 14 Jun 2012 14:45:49 +0000</pubDate>
		<dc:creator>lukmus</dc:creator>
				<category><![CDATA[ruby & ruby on rails]]></category>
		<category><![CDATA[CarrierWave]]></category>
		<category><![CDATA[nokogiri]]></category>
		<category><![CDATA[ROR 3]]></category>
		<category><![CDATA[ruby on rails 3]]></category>
		<category><![CDATA[яндекс.фотки]]></category>

		<guid isPermaLink="false">http://blog.lukmus.ru/?p=1311</guid>
		<description><![CDATA[Использовать свой сервер для хранения больших фото порой бывает дорого, а если вы хотите еще и хранить разные версии одного и того же изображения (например: иконка, средний размер и оригинал), то часто проделывание стольких преобразований над каждым файлом требует большого количества процессорного времени. Яндекс.Фотки предоставляет API, которые, конечно не идеальны (в смысле я бы расширил [...]]]></description>
			<content:encoded><![CDATA[<p>Использовать свой сервер для хранения больших фото порой бывает дорого, а если вы хотите еще и хранить разные версии одного и того же изображения (например: иконка, средний размер и оригинал), то часто проделывание стольких преобразований над каждым файлом требует большого количества процессорного времени. Яндекс.Фотки предоставляет API, которые, конечно не идеальны (в смысле я бы расширил их функционал), однако, могут решить вышеуказанные проблемы. Ниже будет описано как интегрировать Яндекс.Фотки в Rails 3 через Carrierwave.<br />
<a href="http://blog.lukmus.ru/wp-content/uploads/2012/06/decorated_trains_in_japan_17.jpg"><img class="aligncenter size-full wp-image-1312" title="decorated_trains_in_japan_17" src="http://blog.lukmus.ru/wp-content/uploads/2012/06/decorated_trains_in_japan_17.jpg" alt="" width="517" height="386" /></a><span id="more-1311"></span><br />
Для начала нужно зарегистрироваться на Яндексе. И дальше есть 2 способа: самому разобраться в <a rel="nofollow" href="http://api.yandex.ru/fotki/" target="_blank">API</a> или воспользоваться готовым гемом под Carrierwave. Я воспользусь вторым способом.</p>
<h2>gem carrierwave-yandexfotki</h2>
<p><a rel="nofollow" href="https://github.com/nicck/carrierwave-yandexfotki" target="_blank">Гем</a> придумал и написал <a style="text-decoration: none; font-weight: bold;" rel="nofollow" href="http://clubs.ya.ru/api-fotki/replies.xml?item_no=274" target="_blank"><span style="color: red;">n</span><span style="color: #000;">icck</span></a>, за что ему огромное спасибо, уважение и почет. Однако, гем был написан в начале прошлого года, поэтому немного устарел, а точнее стал чуть-чуть не совместим с текущей версией Rails и Ruby.</p>
<h3>установка</h3>
<p>Добавляем в Gemfile:</p>

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

<p>Причем именно в таком порядке иначе будет ошибка.<br />
Теперь по традиции бандлим:</p>

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

<p>Тут могут возникнуть проблемы с зависимостями для Nokogiri:</p>

<div class="wp_syntax"><table><tr><td class="code"><pre class="" style="font-family:monospace;">...
Installing curb <span class="br0">&#40;</span>0.8.0<span class="br0">&#41;</span> with native extensions
Installing nokogiri <span class="br0">&#40;</span>1.5.4<span class="br0">&#41;</span> with native extensions
Gem::Installer::ExtensionBuildError: ERROR: Failed to
build gem native extension.
&nbsp;
        /usr/local/rvm/rubies/ruby-1.9.2-p290/bin/ruby
extconf.rb
checking for libxml/parser.h... no
-----
libxml2 is missing.  please visit ... for help with
installing dependencies.
-----
*** extconf.rb failed ***
...</pre></td></tr></table></div>

<p>В таком случае надо пройти по предложенной <a rel="nofollow" href="http://nokogiri.org/tutorials/installing_nokogiri.html" target="_blank">ссылке</a> и устранить зависимости, после чего повторить <code>bundle install</code>.<br />
Для RedHat-линуксов зависимости устраняются так:</p>

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

<h3>carrierwave</h3>
<p>Теперь также как и в <a href="http://blog.lukmus.ru/?p=1165">случае с Uploadify</a> нужно сгенерировать аплодер carrierwave:</p>

<div class="wp_syntax"><table><tr><td class="code"><pre class="" style="font-family:monospace;">$ rails g uploader image</pre></td></tr></table></div>

<p><em>У меня модель с фотографией называется <code>Picture</code> и у нее есть текстовое поле <code>Image</code>, все дальше описанное будет описываться в этим условием.</em></p>
<p>Теперь надо открыть сгенерированный аплодер (app/uploaders/image_uploader.rb) и привести его к такому же виду как и на странице гема на гитхабе:</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
</pre></td><td class="code"><pre class="ruby" style="font-family:monospace;"><span style="color:#9966CC; font-weight:bold;">class</span> ImageUploader <span style="color:#006600; font-weight:bold;">&lt;</span> <span style="color:#6666ff; font-weight:bold;">CarrierWave::Uploader::Base</span>
&nbsp;
  storage <span style="color:#6666ff; font-weight:bold;">CarrierWave::Storage::YandexFotki</span>
&nbsp;
  yandex_login    <span style="color:#996600;">'login'</span>
  yandex_password <span style="color:#996600;">'password'</span>
&nbsp;
  before <span style="color:#ff3333; font-weight:bold;">:cache</span>, <span style="color:#ff3333; font-weight:bold;">:remove_old_file_before_cache</span>
&nbsp;
  <span style="color:#9966CC; font-weight:bold;">def</span> remove_old_file_before_cache<span style="color:#006600; font-weight:bold;">&#40;</span>new_file<span style="color:#006600; font-weight:bold;">&#41;</span>
    remove! <span style="color:#9966CC; font-weight:bold;">unless</span> blank?
  <span style="color:#9966CC; font-weight:bold;">end</span>
<span style="color:#9966CC; font-weight:bold;">end</span></pre></td></tr></table></div>

<p>Теперь надо примонтировать аплодер к модели (у меня Picture):</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
</pre></td><td class="code"><pre class="ruby" style="font-family:monospace;"><span style="color:#9966CC; font-weight:bold;">class</span> Picture <span style="color:#006600; font-weight:bold;">&lt;</span> <span style="color:#6666ff; font-weight:bold;">ActiveRecord::Base</span>
  mount_before_save_uploader <span style="color:#ff3333; font-weight:bold;">:image</span>, ImageUploader
<span style="color:#9966CC; font-weight:bold;">end</span></pre></td></tr></table></div>

<p>И тут вроде бы все, казалось бы уже можно открыть консоль:</p>

<div class="wp_syntax"><table><tr><td class="code"><pre class="" style="font-family:monospace;">$ rails c
Loading development environment <span class="br0">&#40;</span>Rails 3.1.1<span class="br0">&#41;</span>
&gt; pic=Picture.new
&gt; pic.remote_image_url='http://kremlin.ru/putin-platit-churovu-za-vybory.jpg'
&gt; picture.save
NameError: uninitialized constant YandexFotki::Connection::Nokogiri
from /usr/local/rvm/gems/ruby-1.9.2-p290/gems/carrierwave-yandexfotki-0.0.1/lib/yandexfotki/connection.rb:<span style="">67</span>:in `block in get_token'
...</pre></td></tr></table></div>

<p>Чтобы устранить этот косяк нужно открыть тот самый файл из ошибки (у меня /usr/local/rvm/gems/ruby-1.9.2-p290/gems/carrierwave-yandexfotki-0.0.1/lib/yandexfotki/connection.rb), найти строчку № 67:</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;">xml <span style="color: #339933;">=</span> Nokogiri<span style="color: #339933;">::</span><span style="color: #004000;">XML</span><span style="color: #009900;">&#40;</span>key_xml<span style="color: #009900;">&#41;</span></pre></td></tr></table></div>

<p>После чего вернуться в начало файла и дописать (выделено <span style="color: #333399;">фиолетовым</span>):</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
</pre></td><td class="code"><pre class="ruby" style="font-family:monospace;"><span style="color:#CC0066; font-weight:bold;">require</span> <span style="color:#996600;">&quot;yandexfotki/encryptor&quot;</span>
<span style="color:#CC0066; font-weight:bold;">require</span> <span style="color:#996600;">'nokogiri'</span>
&nbsp;
<span style="color:#9966CC; font-weight:bold;">module</span> YandexFotki
...</pre></td></tr></table></div>

<p>После этого у меня все заработало.</p>
<h3>эксплуатация</h3>
<p>В принципе она описана <a rel="nofollow" href="https://github.com/nicck/carrierwave-yandexfotki/blob/master/README.md#usage" target="_blank">здесь</a>, но я ее повторю.<br />
Загрузка файла может осуществляться как и в обычном варианте Carrierwave, я имею ввиду код в контроллере/моделе:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
</pre></td><td class="code"><pre class="ruby" style="font-family:monospace;">pic = Picture.<span style="color:#9900CC;">new</span>
pic.<span style="color:#9900CC;">image</span> = params<span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#ff3333; font-weight:bold;">:file</span><span style="color:#006600; font-weight:bold;">&#93;</span>
pic.<span style="color:#9900CC;">save</span>!
pic.<span style="color:#9900CC;">image</span>.<span style="color:#9900CC;">url</span></pre></td></tr></table></div>

<p>Варианты изображений можно получить так:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
</pre></td><td class="code"><pre class="ruby" style="font-family:monospace;">pic.<span style="color:#9900CC;">image</span>.<span style="color:#9900CC;">url</span>       <span style="color:#008000; font-style:italic;"># ссылка на оригинал</span>
pic.<span style="color:#9900CC;">image</span>.<span style="color:#9900CC;">url</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#ff3333; font-weight:bold;">:xl</span><span style="color:#006600; font-weight:bold;">&#41;</span>  <span style="color:#008000; font-style:italic;"># ссылка на 800x800</span></pre></td></tr></table></div>

<p>Таблица соответсвий аргументов к методу url и версии изображения:</p>
<p><a href="http://blog.lukmus.ru/wp-content/uploads/2012/06/1.png"><img class="aligncenter size-full wp-image-1327" title="1" src="http://blog.lukmus.ru/wp-content/uploads/2012/06/1.png" alt="" width="515" height="216" /></a><br />
<meta property="og:image" content="http://blog.lukmus.ru/wp-content/uploads/2012/06/decorated_trains_in_japan_17.jpg" /></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.lukmus.ru/2012/06/14/yandeks-fotkicarrierwave-na-rails-3/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>загрузка изображений AJAX&#8217;ом на Rails 3. CarrierWave+Uploadify</title>
		<link>http://blog.lukmus.ru/2011/12/19/zagruzka-izobrazheniy-ajaxom-na-rails-3-carrierwaveuploadify/</link>
		<comments>http://blog.lukmus.ru/2011/12/19/zagruzka-izobrazheniy-ajaxom-na-rails-3-carrierwaveuploadify/#comments</comments>
		<pubDate>Mon, 19 Dec 2011 08:04:18 +0000</pubDate>
		<dc:creator>lukmus</dc:creator>
				<category><![CDATA[ruby & ruby on rails]]></category>
		<category><![CDATA[AJAX]]></category>
		<category><![CDATA[CarrierWave]]></category>
		<category><![CDATA[imagemagick]]></category>
		<category><![CDATA[rmagick]]></category>
		<category><![CDATA[ruby on rails 3]]></category>
		<category><![CDATA[upload file]]></category>
		<category><![CDATA[Uploadify]]></category>

		<guid isPermaLink="false">http://blog.lukmus.ru/?p=1165</guid>
		<description><![CDATA[Больше года назад для загрузки изображений я выбрал Paperclip, но на данный момент поддавшись модным тенденциям переходим на аяксовую форму загрузки используя гем CarrierWave и собственно саму аяксовую примочку Uploadify. Про это уже много где написано, но все как-то разрозненно и вот я решил собрать все вместе. CarrierWave установка Прежде всего надо установить RMagick и [...]]]></description>
			<content:encoded><![CDATA[<p>Больше года назад для загрузки изображений я выбрал <a href="http://blog.lukmus.ru/?p=849">Paperclip</a>, но на данный момент поддавшись модным тенденциям переходим на аяксовую форму загрузки используя гем <a rel="nofollow" href="https://github.com/jnicklas/carrierwave" target="_blank">CarrierWave</a> и собственно саму аяксовую примочку <a rel="nofollow" href="http://www.uploadify.com/" target="_blank">Uploadify</a>.</p>
<p>Про это уже много где написано, но все как-то разрозненно и вот я решил собрать все вместе.</p>
<p><img class="aligncenter size-full wp-image-1166" title="011832" src="http://blog.lukmus.ru/wp-content/uploads/2011/12/011832.jpg" alt="" width="517" height="330" /><span id="more-1165"></span></p>
<h2>CarrierWave</h2>
<h3>установка</h3>
<p>Прежде всего надо установить RMagick и ImageMagick (здесь показан вариант для RH-линуксов):</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> ImageMagick ruby-RMagick ImageMagick-devel <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 'carrierwave'
gem 'rmagick'</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>

<h3>настройка в приложении</h3>
<p>Для начала создадим тестовое приложение (на всякий случай скажу, что бандлили мы уже непосредственно в приложении, здесь же я создаю новое приложение лишь чтобы были понятны мои модели):</p>

<div class="wp_syntax"><table><tr><td class="code"><pre class="bash" style="font-family:monospace;">$ rails new Testapp
$ <span style="color: #7a0874; font-weight: bold;">cd</span> Testapp
$ rails g scaffold Picture image:string
$ rake db:migrate</pre></td></tr></table></div>

<p>После установки CarrierWave появится новый генератор <code>uploader</code>, чем и надо воспользоваться чтобы создать сам аплоадер:</p>

<div class="wp_syntax"><table><tr><td class="code"><pre class="" style="font-family:monospace;">$ rails g uploader image</pre></td></tr></table></div>

<p>После этого появиться файл <code>app/uploaders/image_uploader.rb</code>, где лежат настройки этого аплодера.</p>
<p>Теперь надо смонтировать загрузчик и модель, для этого открываем модель Picture <code>app/models/picture.rb</code> и вставляем туда:</p>

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

<h3>хелперы форм</h3>
<p>Форма для Picture будет выглядеть должна выглядеть примерно так:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
</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;">form_for</span><span style="color:#006600; font-weight:bold;">&#40;</span>@picture,:html <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#006600; font-weight:bold;">&#123;</span>:multipart <span style="color:#006600; font-weight:bold;">=&gt;</span><span style="color:#0000FF; font-weight:bold;">true</span><span style="color:#006600; font-weight:bold;">&#125;</span><span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#9966CC; font-weight:bold;">do</span> <span style="color:#006600; font-weight:bold;">|</span>f<span style="color:#006600; font-weight:bold;">|</span> <span style="color:#006600; font-weight:bold;">%&gt;</span>
  <span style="color:#006600; font-weight:bold;">&lt;%</span>= f.<span style="color:#5A0A0A; font-weight:bold;">file_field</span> <span style="color:#ff3333; font-weight:bold;">:image</span><span style="color:#006600; font-weight:bold;">%&gt;</span>
  <span style="color:#006600; font-weight:bold;">&lt;%</span>= f.<span style="color:#9900CC;">submit</span> <span style="color:#006600; font-weight:bold;">%&gt;</span>
<span style="color:#006600; font-weight:bold;">&lt;%</span>end<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;">image_tag</span> task.<span style="color:#9900CC;">image_url</span>.<span style="color:#5A0A0A; font-weight:bold;">to_s</span> <span style="color:#006600; font-weight:bold;">%&gt;</span></pre></td></tr></table></div>

<p>Практически все, что написано выше я собрал из двух статей: <a rel="nofollow" href="http://asci.blog.ru/120804899.html" target="_blank">http://asci.blog.ru/120804899.html</a> и <a rel="nofollow" href="http://wiki.dgplug.org/index.php/Deploying_of_gitorious_on_fedora" target="_blank">http://wiki.dgplug.org/index.php/Deploying_of_gitorious_on_fedora</a>, так что их можно также почитать если мой пост не ясен.</p>
<h3>настройка загрузчика</h3>
<p>Как я уже писал выше настройки загрузчика находяться в <code>app/uploaders/image_uploader.rb</code>. Там можно сконфигурировать очень многое, например директорию хранения, по умолчанию она:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
</pre></td><td class="code"><pre class="ruby" style="font-family:monospace;"><span style="color:#9966CC; font-weight:bold;">def</span> store_dir
    <span style="color:#996600;">&quot;uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}&quot;</span>
<span style="color:#9966CC; font-weight:bold;">end</span></pre></td></tr></table></div>

<p>Также очень полезной опцией являеться варианты сохранения изображений. Чтобы их было несколько надо подключить RMagick и собственно составить сами версии картинки, например:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
</pre></td><td class="code"><pre class="ruby" style="font-family:monospace;"><span style="color:#9966CC; font-weight:bold;">include</span> <span style="color:#6666ff; font-weight:bold;">CarrierWave::RMagick</span>
process <span style="color:#ff3333; font-weight:bold;">:resize_to_fit</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#006666;">800</span>, <span style="color:#006666;">800</span><span style="color:#006600; font-weight:bold;">&#93;</span>
version <span style="color:#ff3333; font-weight:bold;">:thumb</span> <span style="color:#9966CC; font-weight:bold;">do</span>
  process <span style="color:#ff3333; font-weight:bold;">:resize_to_fill</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#006666;">200</span>,<span style="color:#006666;">200</span><span style="color:#006600; font-weight:bold;">&#93;</span>
<span style="color:#9966CC; font-weight:bold;">end</span></pre></td></tr></table></div>

<p>Стоит знать, что <code>:resize_to_fill</code> и  <code>:resize_to_fit</code> при одинаковом разрешении делает разные вещи, одно обрезает, другое масштабирует.</p>
<p>Подробнее о настройках читаем на <a rel="nofollow" href="https://github.com/jnicklas/carrierwave" target="_blank">офсайте</a>, также можно посмотреть <a rel="nofollow" href="http://railscasts.com/episodes/253-carrierwave-file-uploads" target="_blank">RailsCast</a>.</p>
<h2>Uploadify</h2>
<p>Uploadify это набор скриптов, которые отсылают через AJAX файл, непосредственно к самим рельсам и руби оно не имеет никакого отношения.</p>
<h3>установка</h3>
<p>Качаем сам <a rel="nofollow" href="http://www.uploadify.com/download/" target="_blank">Uploadify</a> и затем распаковываем. Теперь для Rails 3.1.x кидаем файлы <code>jquery.uploadify.v2.1.4.min.js</code> и <code>swfobject.js</code> в <code>app/assets/javascripts</code>, для Rails 3.0.x закидываем их в <code>public/javascripts</code>. Первый файл надо переименовать в <code>jquery.uploadify.js</code>.</p>
<p>Файлы <code>uploadify.swf</code> и <code>cancel.png</code> кидаем в <code>app/assets/images/</code> или <code>public/images</code>, а <code>uploadify.css</code> в <code>app/assets/stylesheets/</code> или <code>public/stylesheets</code>.</p>
<p>Открываем <code>application.js</code> из <code>app/assets/javascripts</code> или <code>public/javascripts</code> для разных версий Rails соответственно, и в конец дописываем:</p>

<div class="wp_syntax"><table><tr><td class="code"><pre class="" style="font-family:monospace;">//= require swfobject
//= require jquery.uploadify</pre></td></tr></table></div>

<p>В форму загрузки изображения (у меня app/views/pictures/_form.html.erb) закидываем сначала:</p>

<div class="wp_syntax"><table><tr><td class="code"><pre class="html" style="font-family:monospace;">&lt;input id=&quot;uploadify&quot; name=&quot;uploadify&quot; type=&quot;file&quot; /&gt;</pre></td></tr></table></div>

<p>а после:</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
</pre></td><td class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #339933;">&lt;</span>script<span style="color: #339933;">&gt;</span>
  $<span style="color: #009900;">&#40;</span>document<span style="color: #009900;">&#41;</span>.<span style="color: #660066;">ready</span><span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
  <span style="color: #000066; font-weight: bold;">var</span> uploadify_script_data <span style="color: #339933;">=</span> <span style="color: #009900;">&#123;</span><span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>
  $<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'#uploadify'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">uploadify</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#123;</span>
    uploader        <span style="color: #339933;">:</span> <span style="color: #3366CC;">'/assets/uploadify.swf'</span><span style="color: #339933;">,</span>
    script          <span style="color: #339933;">:</span> <span style="color: #3366CC;">'&lt;%=pictures_path%&gt;'</span><span style="color: #339933;">,</span>
    cancelImg       <span style="color: #339933;">:</span> <span style="color: #3366CC;">'/images/cancel.png'</span><span style="color: #339933;">,</span>
    auto            <span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">true</span><span style="color: #339933;">,</span>
    multi           <span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">true</span><span style="color: #339933;">,</span>
    removeCompleted <span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">true</span><span style="color: #339933;">,</span>
    scriptData      <span style="color: #339933;">:</span> uploadify_script_data<span style="color: #339933;">,</span>
    onComplete      <span style="color: #339933;">:</span> <span style="color: #000066; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>event<span style="color: #339933;">,</span> ID<span style="color: #339933;">,</span> fileObj<span style="color: #339933;">,</span> doc<span style="color: #339933;">,</span> data<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
    <span style="color: #009900;">&#125;</span>
  <span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #339933;">&lt;/</span>script<span style="color: #339933;">&gt;</span></pre></td></tr></table></div>

<p>В принимающем контроллере (здесь app/controllers/pictures_controller.rb) прописываем например:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
</pre></td><td class="code"><pre class="ruby" style="font-family:monospace;"><span style="color:#9966CC; font-weight:bold;">def</span> create
    <span style="color:#0066ff; font-weight:bold;">@picture</span> = Picture.<span style="color:#9900CC;">new</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#ff3333; font-weight:bold;">:image</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> params<span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#ff3333; font-weight:bold;">:Filedata</span><span style="color:#006600; font-weight:bold;">&#93;</span><span style="color:#006600; font-weight:bold;">&#41;</span>
    <span style="color:#0066ff; font-weight:bold;">@picture</span>.<span style="color:#9900CC;">save</span>
<span style="color:#9966CC; font-weight:bold;">end</span></pre></td></tr></table></div>

<p>И в самом начале контроллера убираем защиту от CSRF:</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;">protect_from_forgery <span style="color:#ff3333; font-weight:bold;">:except</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#ff3333; font-weight:bold;">:create</span></pre></td></tr></table></div>

<p>Для тех кто не хочет отключать защиту от CSRF может попытаться следовать <a rel="nofollow" href="http://stackoverflow.com/questions/8363698/rails-carrier-wave-with-jquery-uploader" target="_blank">полной инструкции</a>.</p>
<p>Если все правильно сделали, то должно получиться как на <a rel="nofollow" href="http://www.uploadify.com/demos/" target="_blank">первой демке</a>.</p>
<h2>Дополнение от 14.04.2012 (касаемо CSRF). Архиважное.</h2>
<p>Итак, чтобы не отключать защиту от CSRF нужно сделать следующее.</p>
<p>1. Бандлим гем <a rel="nofollow" href="https://github.com/trevorturk/flash_cookie_session" target="_blank">flash_cookie_session</a>, он нужен для того, чтобы не прописывать вагон всякой ерунды про поле User-Agent в заголовке запроса, если агентом является Flash, как в нашем случае.</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
</pre></td><td class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #ff0000;">&quot;gem 'flash_cookie_session'&quot;</span> <span style="color: #000000; font-weight: bold;">&gt;&gt;</span> Gemfile
bundle <span style="color: #c20cb9; font-weight: bold;">install</span></pre></td></tr></table></div>

<p>2. Прописываем в дополнительные параметры Uploadify <code>authenticity_token</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
16
17
18
19
20
21
</pre></td><td class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #339933;">&lt;</span>script<span style="color: #339933;">&gt;</span>
$<span style="color: #009900;">&#40;</span>document<span style="color: #009900;">&#41;</span>.<span style="color: #660066;">ready</span><span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
  $<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'#uploadify'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">uploadify</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#123;</span>
    uploader        <span style="color: #339933;">:</span> <span style="color: #3366CC;">'/assets/uploadify.swf'</span><span style="color: #339933;">,</span>
    script          <span style="color: #339933;">:</span> <span style="color: #3366CC;">'&lt;%=uploadify_pictures_path%&gt;'</span><span style="color: #339933;">,</span>
    cancelImg       <span style="color: #339933;">:</span> <span style="color: #3366CC;">'/assets/cancel.png'</span><span style="color: #339933;">,</span>
    auto            <span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">true</span><span style="color: #339933;">,</span>
    multi           <span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">true</span><span style="color: #339933;">,</span>
    removeCompleted <span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">true</span><span style="color: #339933;">,</span>
    buttonText      <span style="color: #339933;">:</span> <span style="color: #3366CC;">'Select Files'</span><span style="color: #339933;">,</span>
    scriptData      <span style="color: #339933;">:</span> <span style="color: #009900;">&#123;</span>
     <span style="color: #3366CC;">'_http_accept'</span><span style="color: #339933;">:</span> <span style="color: #3366CC;">'application/javascript'</span><span style="color: #339933;">,</span>
     <span style="color: #3366CC;">'_method'</span><span style="color: #339933;">:</span> <span style="color: #3366CC;">'put'</span><span style="color: #339933;">,</span>
     <span style="color: #3366CC;">'&lt;%=Rails.application.config.session_options[:key] %&gt;'</span><span style="color: #339933;">:</span>
     encodeURIComponent<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'&lt;%= u cookies[session_key_name] %&gt;'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span>
     <span style="color: #3366CC;">'authenticity_token'</span><span style="color: #339933;">:</span>
     encodeURIComponent<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'&lt;%= u form_authenticity_token %&gt;'</span><span style="color: #009900;">&#41;</span>
     <span style="color: #009900;">&#125;</span>
  <span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #339933;">&lt;/</span>script<span style="color: #339933;">&gt;</span></pre></td></tr></table></div>

<p>В результате этой мимикрии мы сможем оставить защиту от CSRF и сохранить сессию при запросе от Uploadify.</p>
<p>Источники дополнения:<br />
<a href="http://www.damiangalarza.com/posts/ruby-on-rails/using-uploadify-with-rails-3/" target="_blank" rel='nofollow'> http://www.damiangalarza.com/posts/ruby-on-rails/using-uploadify-with-rails-3/</a><br />
<a href="http://erniemiller.org/2010/07/09/uploadify-and-rails-3/" target="_blank" rel='nofollow'> http://erniemiller.org/2010/07/09/uploadify-and-rails-3/</a><br />
<meta property="og:image" content="http://blog.lukmus.ru/wp-content/uploads/2011/12/011832.jpg" /></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.lukmus.ru/2011/12/19/zagruzka-izobrazheniy-ajaxom-na-rails-3-carrierwaveuploadify/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>
