Архив автора: shilovk

debug

http://rusrails.ru/debugging-rails-applications

-Rails.logger.info «H1ello world! #{@version.title}»
- byebug

help list

чтобы просмотреть предыдущие десять строчек, следует написать list- (or l-)

В любое время можете вызвать команду backtrace (или ее псевдоним where), чтобы напечатать трассировку приложения

команду frame _n_, где n это номер определенного фрейма

instance_variables

instance_variables.include? «@articles»

(byebug) help var
v[ar] cl[ass]                   show class variables of self
v[ar] const <object>            show constants of object
v[ar] g[lobal]                  show global variables
v[ar] i[nstance] <object>       show instance variables of object
v[ar] l[ocal]                   show local variables

 var instance Article.new

display @articles

 Чтобы остановить отображение переменной, используйте undisplay _n_, где n это номер переменной (1 в последнем примере)

Используйте step (сокращенно s) для продолжения запуска вашей программы до следующей логической точки останова и возврата контроля debugger.

Также можете использовать next, которая похожа на step, но вызовы функции или метода, выполняемые в строке кода, выполняются без остановки.

разница между next и step в том, что step останавливается на следующей линии выполняемого кода, делая лишь один шаг, в то время как next перемещает на следующую строку без входа внутрь методов.

Можете добавлять точки останова динамически с помощью команды break (или просто b). Имеются 3 возможных способа ручного добавления точек останова:

  • break line: устанавливает точку останова в строчке номер line в текущем файле исходника.
  • break file:line [if expression]: устанавливает точку останова в строчке номер line в файле file. Если задано выражение expression, оно должно быть вычислено в true, чтобы запустить отладчик.
  • break class(.|\#)method [if expression]: устанавливает точку останова в методе method (. # для метода класса и экземпляра соответственно), определенного в классе class. Выражение expression работает так же, как и с file:line.
  • Используйте info breakpoints _n_ или info break _n_ для отображения перечня точек останова
  • Чтобы удалить точки останова: используйте команду delete _n_ для устранения точки останова номер n.

Также можно включить или отключить точки останова:

  • enable breakpoints: позволяет перечню breakpoints или всем им, если перечень не определен, останавливать вашу программу. Это состояние по умолчанию для создаваемых точек останова.
  • disable breakpointsbreakpoints не будут влиять на вашу программу.

Команда catch exception-name (или просто cat exception-name) может использоваться для перехвата исключения типа exception-name

Есть два способа возобновления выполнения приложения, которое было остановлено отладчиком:

  • continue line-specification: возобновляет выполнение программы с адреса, где ваш скрипт был последний раз остановлен; любые точки останова, установленные на этом адресе будут пропущены. Дополнительный аргумент line-specification позволяет вам определить число линий для установки одноразовой точки останова, которая удаляется после того, как эта точка будет достигнута.
  • finish frame-number: выполняет, пока не возвратится выделенный кадр стека. Если номер кадра не задан, приложение будет запущено пока не возвратиться текущий выделенный кадр. Текущий выделенный кадр начинается от самых последних, или с 0, если позиционирование кадров (т.е. up, down или frame) не было выполнено. Если задан номер кадра, будет выполняться, пока не вернется указанный кадр

Две команды позволяют открыть код из отладчика в редакторе:

  • edit [file:line]: редактирует файл file, используя редактор, определенный переменной среды EDITOR. Определенная линия line также может быть задана

Чтобы выйти из отладчика, используйте команду quit (сокращенно q), или ее псевдоним exit

У byebug имеется несколько доступных опций для настройки его поведения:

  • set autoreload: Перезагрузить исходный код при изменении (по умолчанию true).
  • set autolist: Запускать команду list на каждой точке останова (по умолчанию true).
  • set listsize _n_: Установить количество строчек кода для отображения по умолчанию n (по умолчанию 10).
  • set forcestep: Убеждаться, что команды next и step всегда переходят на новую строчку.

Можно просмотреть полный перечень, используя help set. Используйте help set _subcommand_ для изучения определенной команды set.

.byebugrc в домашней директории

список полезных плагинов для отладки:

  • Footnotes: У каждой страницы Rails есть сноска, дающая информацию о запросе и ссылку на исходный код через TextMate.
  • Query Trace: Добавляет трассировку запросов в ваши логи.
  • Query Reviewer: Этот плагин rails не только запускает «EXPLAIN» перед каждым из ваших запросов select в development, но и представляет небольшой DIV в отрендеренном результате каждой страницы со сводкой предупреждений по каждому проанализированному запросу.
  • Exception Notifier: Предоставляет объект рассыльщика и набор шаблонов по умолчанию для отправки уведомлений по email, когда происходят ошибки в приложении в Rails.
  • Better Errors Заменяет стандартную страницу ошибки Rails новой, содержащей больше контекстной информации, такой как исходный код и просмотр переменных.
  • RailsPanel Расширение для Chrome для разработки на Rails, которое подхватывает изменения в development.log. Всю информацию о запросах к приложинеию Rails можно смотреть в браузере, в панели Developer Tools. Предоставляет обзор времени db/rendering/total, списка параметров, отрендеренных вьюх и так далее.

about rvm

1. Установка RVM


1. Для установки вам понадобятся curl и git (apt-get install git curl)
2.

    #Скачивание скрипта установки с сервера и запуск (от имени вашего пользователя)
     % bash < <(curl -s https://rvm.beginrescueend.com/install/rvm)
    


3. После установки нужно добавить информацию об установленном приложении rvm в bash
#Дописывает в конфигурационный файл bash строчку, которая проверяет наличие директории с rvm и если
#всё ок, запускает программу
% echo '[[ -s "$HOME/.rvm/scripts/rvm" ]] && . "$HOME/.rvm/scripts/rvm" # Load RVM function'>>~/.bash_profile

В файле $HOME/.bashrc заменяем строчку [ -z "$PS1" ] && return на if [[ -n "$PS1" ]]; then Т.к. мы используем if, то в конце файла проставьте fi, это позволяет запускать программы в неинтерактивном режиме, а rvm как раз является примером такой программы
4. Проверяем как прошла установка 
% rvm -v 
rvm 1.6.20 by Wayne E. Seguin (wayneeseguin@gmail.com) [https://rvm.beginrescueend.com/]
если вы видите версию rvm, значит всё ОК 


2. Работа с разными версиями Ruby


Чтобы просмотреть все доступные для установки версии Ruby 
% rvm list known
# MRI Rubies
[ruby-]1.8.6[-p420]
[ruby-]1.8.6-head
[ruby-]1.8.7[-p334]
[ruby-]1.8.7-head
[ruby-]1.9.1-p378
[ruby-]1.9.1[-p431]
[ruby-]1.9.1-head
[ruby-]1.9.2[-p180]
[ruby-]1.9.2-head
ruby-head
# GoRuby
goruby
# JRuby
jruby-1.2.0
jruby-1.3.1
jruby-1.4.0
jruby-1.6.1
jruby[-1.6.2]
jruby-head

Предположим вы работаете с двумя версиями 1.8.7 для ROR2 и 1.9.2 для ROR3
# Устанавливаем 2 версии Ruby
% rvm install 1.8.7 
% rvm install 1.9.2 

Чтобы увидеть все установленные версии Ruby
% rvm list
rvm rubies
ruby-1.8.7-p334 [ i386 ]
ruby-1.9.2-p180 [ i386 ]

Переключиться на ruby 1.8.7
% rvm use ruby-1.8.7
Using /home/user/.rvm/gems/ruby-1.8.7-p334

Использовать версию ruby 1.9.2 по умолчанию
% rvm use ruby 1.9.2 --default
Using /home/user/.rvm/gems/ruby-1.9.2-p180
% rvm list
rvm rubies
=> ruby-1.9.2-p180 [ i386 ] # "=>" показывают версию Ruby установленную по умолчанию
ruby-1.8.7-p334 [ i386 ]


3. Работа с gemsets


Например вы используете Ruby On Rails версии 2 и 3 с Ruby 1.8.7 и для каждого из них у вас свой набор gem’s.
Создадим два разных набора gemset’ов:
% rvm use 1.8.7@rails2 --create
Using /home/user/.rvm/gems/ruby-1.8.7-p334 with gemset rails2
% rvm use 1.8.7@rails3 --create
Using /home/user/.rvm/gems/ruby-1.8.7-p334 with gemset rails3
% rvm gemset list
gemsets for ruby-1.8.7-p334 (found in /home/slip/.rvm/gems/ruby-1.8.7-p334)
global # gemset по умолчанию
rails2
rails3
% rvm use 1.8.7@rails3 --default # Использовать gemset rails3 по умолчанию
% rvm gemset list
gemsets for ruby 1.8.7-p334 (found in /home/user/.rvm/gems/ruby-1.8.7-p334)
global
rails2
=> rails3 # rails3 стоит по умолчанию

Gemset’ы можно удалять, очищать, экспортировать и импортировать гемы из одного в gemset’a в другой.
RVM предоставляет следующие команды для работы с gemsets:
create — создание нового gemset
export — экспорт списка гемов в файл default.gems
import — установка в текущий gemset списка гемов из файла default.gems
delete — удалить gemset
empty — очистить gemset

4. Задание окружения под отдельный проект с помощью .rvmrc


Как быть если у вас несколько проектов, каждый из которых используют разную версию gemset? Можно конечно переключиться между gemset’ами вручную с помощь rvm use {rubyversion}@{gemsetname}, но и тут RVM приходит нам на помощь, делая эту часть работы за нас. 
Создаем файл .rvmrc в корневой директории проекта. Например проект используют ruby версии 1.8.7 с gemset projectname.
#Содержимое файла .rvmrc
rvm use 1.8.7@projectname

Теперь когда вы заходите в директорию, cd /home/user/www/projectname — RVM исполняет команду из файла .rvmrc и вы видите на экране подобное сообщение
Using /home/user/.rvm/gems/ruby-1.8.7-p334 with gemset projectname

Таким образом вам больше не приходиться думать какой gemset использует конкретный проект и устанавливать его вручную.

5. Команды RVM которые могут оказаться полезными


1. Completion — позволяет использовать tab при работе с rvm 
Чтобы включить, добавьте строку [[ -r $rvm_path/scripts/completion ]] &&. $rvm_path/scripts/completionв файл .bashrc или .bash_profile, после строки с подлючением rvm. Подробнее можно почитать здесьrvm.beginrescueend.com/workflow/completion
2. rvmreset — перезагрузка RVM
3. rvm uninstall — удалить одну или несколько версию Ruby, оставив исходники
4. rvm implode — полностью удалить RVM (удаляет ВСЁ)

6. Шпаргалка по основным командам RVM


rvm list known — получить список всех версий ruby доступных для установки
rvm install 1.9.1 – установить ruby версии 1.9.1
rvm remove 1.9.2 – удалить ruby версии 1.9.2
rvm use 1.9.2 — переключиться на ruby версии 1.9.2
rvm use 1.9.2@rails3 —default — установить версию ruby 1.9.2 c gemset rails3 по умолчанию
rvm use system — использовать системную версию ruby
rvm list – список установленных версий ruby
rvm gemset list – список gemset’ов в выбранной версии ruby
rvm use 1.9.2@rails3 —create создать gemset rails3 для ruby версии 1.9.2
rvm gemset export — экспортировать гемсет в файл default.gems
rvm gemset import default.gems — установить gem’s из списка в файле defaults.gem в текущий gemset

Update rvm:

echo rvm_autoupdate_flag=2 >> ~/.rvmrc

gpg2 —keyserver hkp://keys.gnupg.net —recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3

rvm list known

Cкриншот с видео при загрузке

before_save :define_screenshot
 
 def define_screenshot
    return if file.queued_for_write.empty?
    temp_name = get_temp_name
    video_file = file.queued_for_write[:original].path
    cmd = 'ffmpeg -i #{video_file} -an -ss 00:00:10 -an -r 1 -vframes 1 -y -f mjpeg #{temp_name} >/dev/null 2>&1'
    Rails.logger.info 'Running cmd: #{cmd}'
    system cmd
    self.thumbnail = File.open(temp_name)
  end

  def get_temp_name
    tempdir = Dir::tmpdir || /tmp
    t = Time.now.strftime('%Y%m%d')
    path = 'clip#{t}-#{$$}-#{rand(0x100000000).to_s(36)}.jpg'
    File.join(tempdir, path)
  end

mysql password

Reset:

stop server and run windows-console with Admin’s rights

«C:\Program Files\MySQLnew\MySQL Server 5.6\bin\mysqld» —defaults-file=»C:\ProgramData\MySQnewL\MySQL Server 5.6\my.ini» —init-file=C:\\mysql-init.txt

Change:

SET PASSWORD FOR root@localhost=PASSWORD(‘newpass’);

CREATE USER ‘jeffrey’@’localhost’ IDENTIFIED BY ‘mypass’;

or:

$ mysqladmin -u root -p oldpassword newpass

link link

mongo set value

db.users.update( { _id: ObjectId(«54d09446afcc44142c000001″) }, { $set: { account_token: null} } );

block ip

iptables -A INPUT -s 85.25.71.227 -j REJECT

service iptables save

yandex-disk with webdav

read

Сперва вам потребуется установленный пакет libproxy:

Для CentOS x64:

# yum install libproxy.x86_64

Для CentOS i686

# yum install libproxy.i686

После этого качаем rpm davfs2 и его зависимости:

Для CentOS x64:

# wget http://pkgs.repoforge.org/davfs2/davfs2-1.4.6-1.el6.rf.x86_64.rpm
# wget ftp://rpmfind.net/linux/centos/6.3/os/x86_64/Packages/neon-0.29.3-2.el6.x86_64.rpm 
# wget ftp://rpmfind.net/linux/centos/6.3/os/x86_64/Packages/pakchois-0.4-3.2.el6.x86_64.rpm

Для CentOS i686

# wget http://pkgs.repoforge.org/davfs2/davfs2-1.4.6-1.el6.rf.i686.rpm
# wget ftp://rpmfind.net/linux/centos/6.3/os/x86_64/Packages/neon-0.29.3-2.el6.686.rpm
# wget ftp://rpmfind.net/linux/centos/6.3/os/x86_64/Packages/pakchois-0.4-3.2.el6.686.rpm

Устанавливаем скачанные пакеты:

Для CentOS x64:

# rpm -i davfs2-1.4.6-1.el6.rf.x86_64.rpm neon-0.29.3-2.el6.x86_64.rpm pakchois-0.4-3.2.el6.x86_64.rpm

Для CentOS i686:

# rpm -i davfs2-1.4.6-1.el6.rf.i686.rpm neon-0.29.3-2.el6.i686.rpm pakchois-0.4-3.2.el6.i686.rpm

Создадим точку монтирования:

# mkdir /mnt/yandex.disk

Примонтируем наш диск, введя логин и пароль от нашей почты на Я.ру (use https, Luke!):

# mount -t davfs https://webdav.yandex.ru /mnt/yandex.disk/
Please enter the username to authenticate with server
https://webdav.yandex.ru or hit enter for none.
  Username: lamnya
Please enter the password to authenticate user lamnya with server
https://webdav.yandex.ru or hit enter for none.
  Password: 

Убедимся, что всё в порядке:

# df -h /mnt/yandex.disk/
Filesystem            Size  Used Avail Use% Mounted on
https://webdav.yandex.ru
                      10G  1G   10G   10% /mnt/yandex.disk
Простой скрипт для автоматического монтирования (спасибо uscr viahabrahabr.ru/post/142067/#comment_4752116):

#!/usr/bin/expect
spawn mount.davfs https://webdav.yandex.ru /clouds/yandex.disk/
expect "Username:"
send "USERNAME@yandex.ru\r"
expect "Password:"
send "PASS\r"
expect eof

not work service mongod start

may be:

  • errors in /var/log/mongodb/mongod.log
  • litle free disk spase (df -h)
  • after:

rm -rf /mongo-testdata/mongod.lock
[root@shilov project]# chown -R mongod.mongod /mongo-testdata
[root@shilov project]# mongod —config /etc/mongod.conf