Сообщения

RubyOnRails и Flex (продолжение)

Изображение
Задача: после того, как пользователь расчитает заказ в калькуляторе стоимости печати , у него может возникнуть желание сохранить данный расчет. Такую возможность имеют только зарегистрированные пользователи. Т.е. необходимо проверить - прошел ли пользователь авторизацию на сайте. Решение: проверим статус пользователя, т.е. пошлем из Flex-приложения GET-запрос в Rails-приложение, для чего создадим вот такой HTTP-сервис: <mx:HTTPService id="LoginReq" url="http://наш_домен/auth" result="httpLoginReqResultHandler(event)" useProxy="false" /> ... public function httpLoginReqResultHandler(event:ResultEvent):void {  var is_auth:Boolean = Boolean(event.result);  if (is_auth) { ... } else { ... } } ... <mx:Button id="btSave" click="{LoginReq.send()}"> Осталось только прописать в Rails-приложении метод auth: //orders_controller.rb def auth  render :text => signed_in? end //route...

RubyOnRails и Flex

Изображение
С самого начала, приступая к работе над сайтом типографии , я решил, что онлайн-калькулятор стоимости печати буду писать на Flex, но потом передумал и сделал на Ruby. Во-первых, потому что программировать на Ruby - это одно бесконечное удовольствие), а во-вторых, я, признаться, боялся, что будет не так просто подружить Rails и Flex, и что в итоге все обернется паникой и продолжительной депрессией. К удивлению, все оказалось более чем легко и просто (в чем я убедился, когда таки набрался решимости и переписал все с Ruby во Flex). Ниже опишу несколько задач по Rails + Flex и их решения. Задача: на стартовой странице сайта отображается список видов изделий (буклеты, листовки и т.п.), стоимость которых пользователь может посчитать в онлайн-калькуляторе. При клике на название изделия нужно а) загрузить страницу с калькулятором, б) передать  в калькулятор ID изделия, чтобы активировать режим расчета именно того изделия, которое выбрал пользователь на стартовой странице. Решение...

Определяем в Rails название города по IP посетителя сайта

Изображение
remote_ip = request.remote_ip result = Net::HTTP.get(URI.parse("http://ipgeobase.ru:7020/geo?ip=#{remote_ip}") ic = Iconv.new('UTF-8', 'WINDOWS-1251') conv_res = ic.iconv(result + ' ')[0..-2] Вот, собственно, и все. Название города в conv_res, вместе с названием региона и прочей информацией, которую выдает по IP замечательный ресурс ipgeobase.ru )

Загрузка файлов по FTP из Rails

Изображение
$ rails g controller Ftp upload ../app/controllers/ftp_controller.rb require 'net/ftp' class FtpController < ApplicationController   def upload     ftp = Net::FTP.new('сервер')     ftp.passive = true     ftp.login(user = "пользователь", passwd="пароль")     ftp.putbinaryfile("путь к файлу", File.basename("название файла"))     ftp.quit()   end end Все просто. Устанавливаем соединение с ftp-сервером и передаем путь к файлу. Но если нам неизвестен путь к файлу? Тогда все становится несколько сложнее. Для примера - добавим форму, где пользователь может выбрать файл для загрузки... ../app/views/ftp/_ftp.html.erb <% form_tag '/upload', :method => :post, :multipart => true do %> <label>Выберите файл</label><%= file_field 'upload', 'filedata' %> <%= submit_tag "Поехали!" %> <% end %> Редактируем контроллер - def upload   file = params[:upload]...

Rails 3 + Apache + Passenger на Ubuntu 11.04

Изображение
Разворачиваем по-быстрому Rails 3 + Apache + Passenger на Ubuntu 11.04 GIT $ sudo apt-get install git-core RVM $ sudo apt-get install curl $ bash < <(curl -s https://rvm.beginrescueend.com/install/rvm) Редактируем ~/.bashrc - добавляем строку -  [[ -s "$HOME/.rvm/scripts/rvm" ]] && . "$HOME/.rvm/scripts/rvm"   Перезапускаем терминал и выполняем -   $ type rvm | head -1  Если результат " rvm is a function " - установка прошла успешно. RUBY $ rvm pkg install zlib $ rvm install 1.8.7 --with-zlib-dir=$rvm_path/usr $ rvm --create use 1.8.7@myapp Проверяем - $ ruby -v RAILS $ gem install rails --version 3.0.7 Проверяем - $ rails -v APACHE $ sudo apt-get install apache2 PASSENGER $ gem install passenger $ passenger-install-apache2-module Тут придется повозиться. Установщик модуля проверит наличие необходимых компонентов и выдаст инструкции по установке недостающих. Выполняем эти инструкции. Все должно установиться без проблем, за искл...

Mongrel и Rails 3

Изображение
Удалось таки запустить! Делается так - прописываем в Gemfile - gem "mongrel", "1.2.0.pre2" gem "cgi_multipart_eof_fix" gem "fastthread" gem "prototype-rails", "0.3.1" - выполняем bundle install и запускаем rails s.

Правило № 2

Изображение
Нашел на flashflex.com статью Dos And Donts Of Professional Flex Development от Garry Smith. Правила "хорошего" и "дурного" тона профессиональной Flex-разработки. Одно из них: Правило № 2. Не используйте WYSIWYG редактор в Flex Builder . Помню, однажды мне порекомендовали обратить внимание на FDT . Начал было разбираться, но потерял всякий интерес, как только обнаружил, что там отсутствует WYSIWYG редактор.  Прошли годы. Теперь я использую FlashDevelop, в котором тоже нет режима "design", но сегодня это уже не кажется мне равносильным слепоте) Почему WYSIWYG - в нашем случае - это действительно плохо? Ведь, кажется, что данный подход дает более полный контроль над приложением - мы сразу видим то, что хотим  получить. Более того, такой подход упрощает разработку - код "пишется сам", режим "design" заслоняет от нас код, и вот это "преимущество" на практике оборачивается в самый главный недостаток.  Отстранившись от кода - л...