суббота, 25 сентября 2010 г.

spree+bluehost

То что в россии нормального хостинга нет все надеюсь знают.

Потому ставим рельсовое приложение на хостинг bluehost

Для начала надо активировать ssh на своем аккаунте - для этого создается тикет и прикладывается
скан паспорта(у меня прокатил скан старого паспорта - они может и не смотрели на него)

Затем ставим все необходимые гемы:

качаем архив сприи http://github.com/railsdog/spree/tarball/v0.11.0

распаковываем tar -xzvf ./имя_архива.tgz

заходим в него и ставим гемы rake gems:install

Запускаем gem env

Находим GEM PATHS оно будет такое /home2/username/ruby/gems

вписываем в "echo 'export GEM_PATH=/home2/username/ruby/gems' >> ~/.bashrc "

перелогиниваемся или вызываем export GEM_PATH=/home2/username/ruby/gems


ставим недоставющие гемы gem install rack -v '=1.1.0' --no-ri --no-rdoc

добавляем в config/environment.rb гемы less treetop mutter и прописываем окружение production

распаковываем все гемы rake gems:unpack


дальше создаем базу и забиваем необходимыми данными и по желанию тестовыми rake db:bootstrap RAILS_ENV=production



делаем симлинк ln -s ~/spree/public ~/public_html

создаем файл .htaccess

AddHandler fcgid-script .fcgi

RewriteEngine On

RewriteRule ^$ index.html [QSA]

RewriteRule ^([^.]+)/!$ $1.html [QSA]

RewriteCond %{REQUEST_FILENAME} !-f

RewriteRule ^(.*)$ dispatch.fcgi [QSA,L]

ErrorDocument 500 "Application error Application failed to start properly"


Дальше надо отключить редирект на https при входе в админку и при регистрации

Spree::Config[:allow_ssl_in_production]

>> true

Spree::Config.set(:allow_ssl_in_production => false)


проверяем Spree::Config[:allow_ssl_in_production] должно показать false

все - теперь должно работать

recaptcha + rails3

Рекаптча перестала работать в третей рельсе.

Выводится html и js как текст.

А дело в том что секурность рельсы значительно возросла и что б из переменно вставить js в страницу надо это явно указать.

<%= raw recaptcha_tags %>

spree-ebsin

Есть у индусов такая платежная система ebs.in
И им хочется использовать ее вместе со сприи
= EBS Gateway

EBS Payment Gateway Extension (www.ebs.in)

Install and configure extension preferences:

* preference account_id = Get from your account
* preference url = https://secure.ebs.in/pg/ma/sale/pay/
* preference secret_key = Get from your account
* preference mode = 'LIVE' or 'TEST'
* preference currency_code = 'INR'

You can see messages plugin in the application log:

EBS payment authorized on order R374461356

PaymentID = 1190148
Mode = TEST
DateCreated = 2010-08-19 08:55:48
ResponseCode = 0
MerchantRefNo = R374461356
Amount = 62.00
TransactionID = 2288126
ResponseMessage = Transaction Successful

spree-ebsin

spree-quick-auction

Для товаров задаем цены от х до у
Тот кто первый покупает подешевле.
Финт в том что самые дешевые можно ставить уже якобы проданными.
http://github.com/pronix/spree-quick-auction

spree-firstdata

Установка:

Скопировать firstdata_payment_gateway в папку
vendor/extensions и перезапустить spree.
spree-firstdata

Использование "and" и "or" в руби

Если вы достаточно долго используете ruby, вы откроете для себя and и or операторы.

На первый взгляд это просто синонимы && и ||.

Есть любители использовать буквы, есть любители символов(надо ж показать что вы их знаете),HO надо понимать разницу между ними.

В итоге "and" "or" не ведут себя, как и их символическое родственников. В частности, они имеют гораздо более низкий приоритет.

На данный момент, вы можете матюгнуться если это покажется слишком запутанным.

А если использовать оба варианта то код становится запутанным.

Вообще поведение and и or (как и многое в руби) уходит корнями в перл.

В перле они использовались как операторы if и unless.
Например так:

do_something() or die "It didn't work!";

Эти же операторы в руби преследуют ту же цель.
Для начала "and" и "or" не булёвые операторы, они переключают путь выполнения программы.

and

And используется для цепочек связанных операций когда одна из них может вернуть nil или false.

Пример:

` post = Post.find_by_name(name) and post.publish! `

Тут пост будет опубликован если он найден.

Чем отличается &&? Давайте экспериментировать.
` foo = 42 && foo/2 `

`NoMethodError: undefined method /' for nil:NilClass`
` from (irb):18`
` from :0`

И что же тут случилось ?
Скобочки помогут раскрыть тайну:

`foo = (42 && foo)/2`

Ожидали мы немного другое поведение(теперь-то уже понятно что ожидать такого больше не будем)

`foo = 42 and foo / 2 => 21 `

…другое дело, все как надо выполнилось.

Другой пример

1. next if widget = widgets.pop

Станет:

` widget = widgets.pop and next `


OR

or используется в тех же цепочках операций.
Лучший способ понять эту конструкцию - серия неудачных операций: попробуй способ 1 -> ошибка -> тогда попробуй способ 2 и т.д.
Пример:


` foo = get_foo() or raise "Could not find foo!" `

Пример рефакторинга.
было:

` raise "Not ready!" unless ready_to_rock? `

стало:

` ready_to_rock? or raise "Not ready!" `


Вывод: and и && так же как or и || абсолютно разные инструменты. Использовать надо каждый в своем случае.

asset_host

Если ваше приложение и статические файлы находятся на одном домене,

то броузер с сервером будут обмениваться печеньками(cookies),

что вызовет лишнюю нагрузку на канал.


Яху советует нам всем использовать разные субдомены для статики и приложения.

В итоге все будет работать быстро и потреблять ресурсов меньше.

В рельсе для этого есть параметр asset_host (лучше его использовать только в production окружении).


_config.action_controller.asset_host = "http://assets.ipronix.ru"
_

И конечно надо настроить nginx


_server {
_
_ listen 80;
_
_ server_name assets.ipronix.com;
_
root /var/www/ipronix.com/production/current/public;

_}
_


После рестарта приложения вы увидите что все стало грузиться с разных субдоменов,

и если попробуете измерить скорость и объем то получите выигрыш в каждом запросе.