RubyBarcamp #3 - Ruby Non Web for Webdevelopmen, Stanislav O. Pogrebnyak

Embed Size (px)

Citation preview

  • 8/7/2019 RubyBarcamp #3 - Ruby Non Web for Webdevelopmen, Stanislav O. Pogrebnyak

    1/17

    Ruby Non Web for Webdevelopment

    Stanislav O. Pogrebnyak

    http://www.gera-it.com

  • 8/7/2019 RubyBarcamp #3 - Ruby Non Web for Webdevelopmen, Stanislav O. Pogrebnyak

    2/17

    *nix admin's best friends:

    shell

    perl

    python

    Ruby? Really?

  • 8/7/2019 RubyBarcamp #3 - Ruby Non Web for Webdevelopmen, Stanislav O. Pogrebnyak

    3/17

    Daemonshttp://daemons.rubyforge.org

    *nix (start|stop|restart|run)

    fork - pid

    , stdout

    monit, God ..

    > gem install daemons

    Windows run

  • 8/7/2019 RubyBarcamp #3 - Ruby Non Web for Webdevelopmen, Stanislav O. Pogrebnyak

    4/17

    # "" :

    require 'rubygems'

    require 'daemons'

    Daemons.run('myserver.rb')

    # "" :

    Daemons.daemonize # (start|stop)

  • 8/7/2019 RubyBarcamp #3 - Ruby Non Web for Webdevelopmen, Stanislav O. Pogrebnyak

    5/17

    # Rails:

    require 'rubygems'require 'daemons'

    Dir.chdir(APP_DIR)require File.join('config', 'environment')

    Daemons.run_proc( Actions runner ) doAllModels.do_all_actions

    end

  • 8/7/2019 RubyBarcamp #3 - Ruby Non Web for Webdevelopmen, Stanislav O. Pogrebnyak

    6/17

    > ruby my_daemon.rb start

    > ruby my_daemon.rb stop

    > ruby my_daemon.rb restart

    ( Windows )> ruby my_daemon.rb run

  • 8/7/2019 RubyBarcamp #3 - Ruby Non Web for Webdevelopmen, Stanislav O. Pogrebnyak

    7/17

    RobustThreads

    Daemon Kit

    Looper

    fork

  • 8/7/2019 RubyBarcamp #3 - Ruby Non Web for Webdevelopmen, Stanislav O. Pogrebnyak

    8/17

  • 8/7/2019 RubyBarcamp #3 - Ruby Non Web for Webdevelopmen, Stanislav O. Pogrebnyak

    9/17

    rufus-scheduler

    require 'rubygems'require 'rufus/scheduler'scheduler = Rufus::Scheduler.start_newscheduler.in '20m' do

    puts "order ristretto"

    endscheduler.at 'Thu Mar 26 07:31:43 +0900 2009' do

    puts 'order pizza'endscheduler.cron '0 22 * * 1-5' do

    puts 'activate security system'endscheduler.every '5m' do

    puts 'check blood pressure'endscheduler.join

  • 8/7/2019 RubyBarcamp #3 - Ruby Non Web for Webdevelopmen, Stanislav O. Pogrebnyak

    10/17

    Daemons + rufus-scheduler

    cron

    capistrano

    monit, God ..

  • 8/7/2019 RubyBarcamp #3 - Ruby Non Web for Webdevelopmen, Stanislav O. Pogrebnyak

    11/17

    require 'rubygems'require 'daemons'require 'rufus/scheduler'

    Daemons.run_proc( "drink coffee scheduler" ) doscheduler = Rufus::Scheduler.newscheduler.start

    scheduler.schedule_every "1h" doputs "Its time to drink a cap of coffee or tea!"endscheduler.join

    end

  • 8/7/2019 RubyBarcamp #3 - Ruby Non Web for Webdevelopmen, Stanislav O. Pogrebnyak

    12/17

    Ruby Networking

    Net::\HTTP/HTTPsFTPSFTP

    SSHSCP

  • 8/7/2019 RubyBarcamp #3 - Ruby Non Web for Webdevelopmen, Stanislav O. Pogrebnyak

    13/17

    Net::HTTP(HTTPs)

    HEAD/PUT/GET/POST/DELETE

  • 8/7/2019 RubyBarcamp #3 - Ruby Non Web for Webdevelopmen, Stanislav O. Pogrebnyak

    14/17

    Net::FTP

    ftp

    :

    ftp = Net::FTP.new('ftp.netlab.co.jp')

    ftp.loginfiles = ftp.list('n*')ftp.getbinaryfile('nif.rb-0.91.gz', 'nif.gz', 1024)ftp.close

  • 8/7/2019 RubyBarcamp #3 - Ruby Non Web for Webdevelopmen, Stanislav O. Pogrebnyak

    15/17

    Net::(SFTP/SCP/SSH)http://net-ssh.rubyforge.org

    Net::SSH ,

    Net::SCP

    Net::SFTP FTP Net::SSH

  • 8/7/2019 RubyBarcamp #3 - Ruby Non Web for Webdevelopmen, Stanislav O. Pogrebnyak

    16/17

    Net::(SFTP/SCP/SSH) :

    require 'net/ssh'Net::SSH.start( google.com, larry, :password => love")do |ssh|

    ssh.exec!(rm rf ~/docs)

    ssh.exec (cd ~/work && nohup ruby grab.rb)ssh.exec (cd ~/work && nohup ruby download.rb)ssh.loop # ssh.sftp.download!("/path/to/remote")downloads = []

    downloads

  • 8/7/2019 RubyBarcamp #3 - Ruby Non Web for Webdevelopmen, Stanislav O. Pogrebnyak

    17/17

    ?