IceskYsl@1sters!

程序员…

Archive for the ‘Ruby&Rails’ Category

安装gem:

[root@iceskysl]# gem install spreadsheet –no-ri –no-rdoc
Successfully installed ruby-ole-1.2.10.1
Successfully installed spreadsheet-0.6.4.1
2 gems installed

[root@iceskysl]# gem install spreadsheet –no-ri –no-rdocSuccessfully installed ruby-ole-1.2.10.1Successfully installed spreadsheet-0.6.4.12 gems installed

使用:

require ‘rubygems’

require ‘spreadsheet/excel’

SUM_SPREADSHEET = ‘test.xls’

workbook = Spreadsheet::Excel.new(SUM_SPREADSHEET)

worksheet = workbook.add_worksheet(‘Random numbers and their sum.’)

# sum = 0

# random_numbers = (0..9).collect { rand(100) }

#

# puts “random_numbers=#{random_numbers.size}”

# worksheet.write_column(0, 0, random_numbers)

# worksheet.write_column(0, 1, random_numbers)

worksheet.update_row 4, ‘Hannes Wyss’, ‘Switzerland’, ‘Author’

row = worksheet.row(1)

row.push ‘Creator of Ruby’

row.unshift ‘Yukihiro Matsumoto’

# format = workbook.add_format(:bold => true)

# worksheet.write(10, 0, “Sum:”, format)

# worksheet.write(10, 1, random_numbers.inject(0) { |sum, x| sum + x })

workbook.close

参考:

http://sg552.javaeye.com/blog/701428

http://sunfengcheng.javaeye.com/blog/240130

  • 0 Comments
  • Filed under: Ruby&Rails
  • ruby文件操作大全

    参考:

    http://pleac.sourceforge.net/pleac_ruby/filecontents.html

    ruby文件操作大全 http://www.javaeye.com/topic/517410

    用ruby读写文本文件 http://www.albertsong.com/read-87.html

    Ruby 读取目录(Diretories),文件(files), 网页的几个方法小结

    http://weixuhong.com/rubyruby-on-rails/2008/10/06/ruby-%E8%AF%BB%E5%8F%96%E7%9B%AE%E5%BD%95%EF%BC%88diretories%EF%BC%8C%E6%96%87%E4%BB%B6files-%E7%BD%91%E9%A1%B5%E7%9A%84%E5%87%A0%E4%B8%AA%E6%96%B9%E6%B3%95%E5%B0%8F%E7%BB%93/

  • 0 Comments
  • Filed under: Ruby&Rails
  • Ruby on Rails 3 的相关资料

    1.Rails 3.0 Release Notes – Rails导册对所有Ruby on Rails开发者来说都是很宝贵的资源,这个发布文档介绍了很多API的改进和新特性。

    2.RailsPlugins.org – 提供了很多 Rails 3的插件.

    3.Having Ruby on Rails 3 My Way – Rails 3与Mongoid, Haml, jQuery等的安装

    4.The Rails Module (in Rails 3) -在Rails模块中一些有用的方法

    5.Rails 3 I18n changes – I18n的改变.

    6.Ruby on Rails 3 Screencast series

    ActionController / Rack

    7.Embracing REST with mind, body and soul - José Valim 介绍了 RESTful responders与Rails 3 controller的使用。

    8.Railscasts #224 Controllers in Rails 3 – Rails 3 controllers的新特性.

    9.Render Options in Rails 3 –  Rails 3的渲染的变化.

    10.Adding Routes for tests / specs with Rails 3

    11.32 Rack Resources to Get You Started –  rack相关资源的整合.

    ActionMailer

    12.New ActionMailer API in Rails 3.0 - 如何使用新的ActionMailer.

    13.A Whole New ActionMailer –  ActionMailer的特性.

    ActiveRecord/ActiveModel

    14.ActiveModel: Make Any Ruby Object Feel Like ActiveRecord – ActiveModel的模块化.

    15.Railscasts #219 Active Model - 如何正确的添加ActiveModel 模块到tableless模块.

    16.ActiveRelation: ActiveRecord Gets a Facelift -新的ActiveRecord finder API.

    17.Active Record Query Interface – 自Rails 2以来,ActiveRecord query接口的变化.

    Bundler

    18.Gembundler.com -官方的 Bundler文档,包含一些扩展的文档.

    19.Library Management Gets an Update in Rails 3

    20.Railscasts #201 Bundler - 在Rails 3中,如何使用bundler.

    21.AdventuresInCoding.com screencast on Bundler

    Railties

    22.Rails 3 Internals: Railtie & Creating Plugins –  Railties in Rails 3.

    23.rails-templater – 如何生成一个 greenfield Rails 3 应用.

    24.Making generators for Rails 3 with Thor – 如何使用新的generators ,以及在gem中如何去处理.

    Routes

    25.The Lowdown on Routes in Rails 3 -在 Rails 3创建routes的几个不同的方法.

    26.Rails Routing from the Outside In - 新的 router介绍.

    Plugins

    27.Plugin Authors: Toward a Better Future – Rails 3中创建插件的改变.

    28.Customizing Rails Apps with Plugins - 使用responders, form, devise以及mail form的插件.

    29.Devise 1.1 is out and ready to rock with Rails 3 – Devise 1.1的新特性。

    Books

    30.Beginning Rails 3 – Cloves Carneiro Jr 和 Rida Al Barazi 撰写的 Rails 3 入门书籍,其中有很多实例.

    31.The Rails 3 Way .

    32.Rails 3 In Action - BDD with Cucumber

    33.Rails 3 Upgrade Handbook – Jeremy McAnally的书籍,教你如何从Rails 2 应用升级到Rails 3.

    34.Ruby on Rails Tutorial: Learn Rails by Example – 一步一步的教学习 Rails.

  • 0 Comments
  • Filed under: Ruby&Rails
  • malformed format string on rails~

    在rails中使用find进行模糊查询时,出现了malformed format string输入为字符)或非法字符(输入为数字)的提示。
    (1) @vendors  = Vendor.find(:all,:conditions=>[@sql])
    (2) @vendors = Vendor.find_by_sql(“select * from vendor where “+@sql)
    错误发生在按(1)方式查询过程中,采用(2)方式可以避免这个错误,这间接说明了find_by_sql确实相当不安全。
    查阅了一下资料,对于这个问题的说法如下:Rails uses sprintf (%) on the inside. So, Escape your % with %,因此只要将模糊查询的地方一个百分号全部换成两个便可以解决问题。

  • 0 Comments
  • Filed under: Ruby&Rails
  • ChartsOnRails

    这几天需要找到漂亮的Charts类库,找了几个,发现一个很不粗的,mark下待使用,介绍如下:

    Highcharts is a charting library written in pure JavaScript, offering an easy way of adding interactive charts to your web site or web application. Highcharts currently supports line, spline, area, areaspline, column, bar, pie and scatter chart types.

    有兴趣的可以参考如下连接去看看:

    http://highcharts.com/

    http://railscasts.com/episodes/223-charts

    http://www.spritle.com/blogs/?p=859

  • 1 Comment
  • Filed under: Ruby&Rails
  • def parse_rails_log_file(file)
      # Remove all empty lines
      lines = file.each_line.map(&:strip).reject(&:empty?)
    
      # Use +Enumerable#slice_before+ to slice log file into sections for each request
      lines.slice_before(/Started (GET|POST|PUT|DELETE)/).each_with_object({}) do |request_log, totals|
        # Only include successfully finished actions in report
        if duration = request_log.last[/Completed 200 OK in (?<duration>\d+)ms/, :duration]
          action_name = request_log.first[/Started (GET|POST|PUT|DELETE) "(?<action>.+?)" for/, :action]
          totals[action_name] ||= 0
          totals[action_name] += duration.to_i
        end
      end
    end
    
    if __FILE__ == $PROGRAM_NAME
      require "pp"
      puts "Parsing Rails 3 log file (extracting cumulative running time per request path):"
      puts "================="
    
      log_file = <<-LOG_FILE
      Started GET "/index" for 192.168.74.1 at 2010-03-09 11:37:40
        Processing by UpdatesController#index as HTML
        Update Load (0.5ms)  SELECT `updates`.* FROM `updates` ORDER BY created_at DESC
      Rendered updates/index.html.erb (16.7ms)
      Completed 200 OK in 71ms (Views: 44.3ms | ActiveRecord: 0.5ms)
    
      Started POST "/updates" for 192.168.74.1 at 2010-03-09 11:37:43
        Processing by UpdatesController#create as HTML
        Parameters: {"commit"=>"Save changes"}
        Update Load (0.4ms)  SELECT `updates`.* FROM `updates` ORDER BY created_at DESC
      Rendered updates/index.html.erb (1.3ms)
      Completed 200 OK in 60ms (Views: 32.1ms | ActiveRecord: 0.4ms)
    
      Started GET "/updates" for 192.168.74.1 at 2010-03-09 11:45:51
        Processing by UpdatesController#index as HTML
    
      TypeError (exception class/object expected):
        app/controllers/updates_controller.rb:3:in `raise'
        app/controllers/updates_controller.rb:3:in `index'
    
      Rendered /usr/local/rvm/gems/ruby-1.9.2-head/bundler/gems/rails-16a5e918a06649ffac24fd5873b875daf66212ad-master/actionpack/lib/action_dispatch/middleware/templates/rescues/_trace.erb (1.6ms)
      Rendered /usr/local/rvm/gems/ruby-1.9.2-head/bundler/gems/rails-16a5e918a06649ffac24fd5873b875daf66212ad-master/actionpack/lib/action_dispatch/middleware/templates/rescues/_request_and_response.erb (2.9ms)
      Rendered /usr/local/rvm/gems/ruby-1.9.2-head/bundler/gems/rails-16a5e918a06649ffac24fd5873b875daf66212ad-master/actionpack/lib/action_dispatch/middleware/templates/rescues/diagnostics.erb within /usr/local/rvm/gems/ruby-1.9.2-head/bundler/gems/rails-16a5e918a06649ffac24fd5873b875daf66212ad-master/actionpack/lib/action_dispatch/middleware/templates/rescues/layout.erb (23.9ms)
    
      Started GET "/updates" for 192.168.74.1 at 2010-03-09 11:45:58
        Processing by UpdatesController#index as HTML
        Update Load (0.3ms)  SELECT `updates`.* FROM `updates` ORDER BY created_at DESC
      Rendered updates/index.html.erb (1.1ms)
      Completed 200 OK in 100ms (Views: 29.3ms | ActiveRecord: 0.3ms)
      LOG_FILE
    
      pp parse_rails_log_file(log_file) # => {"/index"=>71, "/updates"=>160}
    end
  • 0 Comments
  • Filed under: Ruby&Rails
  • delayed_job in rails

    Delayed_job (or DJ) encapsulates the common pattern of asynchronously executing longer tasks in the background.

    ref:

    http://adamfortuna.com/2009/08/17/the-amazingness-of-delayed_job-for-rails/

    http://www.magnionlabs.com/2009/2/28/background-job-processing-in-rails-with-delayed_job

    http://github.com/tobi/delayed_job

  • 0 Comments
  • Filed under: Ruby&Rails
  • 近日需要实现feed(动态)消息,同时需要支持多语言,本来没什么难的,做一个多态表,然后存储消息的目标对象,再规定好一些动作,入库或者出库的时候拼装下就好了。这里有个比较有趣的是如何最大限度的重用代码或者规则,最后实现中借鉴了Rails国际化的规则。
    1. 首先定义针对目标可以做的操作,用常量定义好(考虑到数量不会很多,且不会经常变化,就不存数据库),例如:
    class FeedAction

    #APP:1 – 99
    APP_DOWNLOAD = 1 #Download
    APP_FAV = 2 #Favorites
    APP_PAY = 3
    APP_INSTALL = 4

    2. 对定义好的操作名为key,撰写其对应语言的动作描述,写zh.yml或者en.yml文件,例如:
    zh:
    FEED_ACTION:
    APP_DOWNLOAD: “下载了”
    APP_FAV: “收藏了”
    APP_PAY: “购买了”
    APP_RATE: “打了{{rate}}星”

    3.生成消息输出的时候,直接
    >> I18n.locale = ‘zh’
    >> I18n.t ‘FEED_ACTION.APP_PAY’
    => “购买了”
    >> I18n.t ‘FEED_ACTION.APP_RATE’,:rate=>2
    => “打了2星”

  • 0 Comments
  • Filed under: Ruby&Rails
  • 终结下来三大类

    1,md5 sha1等消息摘要

    用的很多,比较熟悉,只是用于验证消息的完整性,而消息本省的传递确是明码的,除非想登录密码md5,那要服务器客户端两边都有。如果需要传输数据给另一方,而这段数据又不希望明文发就得使用密钥了。

    2,des等 ,私有密钥加密数据

    只要约定密钥,然后在通过这个密钥对信息加密然后传送,另一方通过密钥对加密信息解密。

    3,rsa , 公钥和密钥结合的高级货

    公钥不是大家都使用的,而是可以公开的,我开始误会错了搞不懂。通过rsa生成一对密钥,公钥和私钥,通过公钥加密的数据,只有私钥才能解开。那在网络中可以随便告诉客户端公钥,然后对方通过公钥加密后传加密信息,即使地球人都知道公钥也不要紧,因为私钥是保密的,解不开得到了加密信息也没办法。当然私钥加密后信息,公钥也可以解开,但速度上差成百上千倍。

    ruby中通过openssl这个自带的标准库来实现。举了几个例子,des和rsa的

    #!/usr/bin/ruby

    require “openssl”
    #doc see http://www.ruby-doc.org/stdlib/libdoc/openssl/rdoc/index.html

    class Encrypt
    KEY = “aaaabbbb”
    IV = “aaaavvvv”
    def des_encrypt(plaintext)
    c = OpenSSL::Cipher::Cipher.new(“DES-CBC”)
    c.encrypt
    c.key = KEY
    c.iv = IV
    ret = c.update(plaintext)
    ret << c.final
    end

    def des_decrypt(encrypt_value)
    c = OpenSSL::Cipher::Cipher.new("DES-CBC")
    c.decrypt
    c.key = KEY
    c.iv = IV
    ret = c.update(encrypt_value)
    ret << c.final
    end

    def get_rsa_key
    rsa = OpenSSL::PKey::RSA.new(1024)
    # public_key only can public_encrypt or public_decrypt no private_encrypt nor private_decrypt
    #rsa.public_key.to_pem the class of return value is String
    [rsa.public_key.to_pem , rsa.to_pem]
    end

    def rsa_private_encrypt(value , rsakey)
    rsa = OpenSSL::PKey::RSA.new(rsakey)
    rsa.private_encrypt(value)
    end

    def rsa_private_decrypt(value , rsakey)
    rsa = OpenSSL::PKey::RSA.new(rsakey)
    rsa.private_decrypt(value)
    end

    def rsa_public_encrypt(value , publickey)
    rsa = OpenSSL::PKey::RSA.new(publickey)
    rsa.public_encrypt(value)
    end

    def rsa_public_decrypt(value , publickey)
    rsa = OpenSSL::PKey::RSA.new(publickey)
    rsa.public_decrypt(value)
    end
    end

    def testrun
    e = Encrypt.new
    text = "a secret message"
    puts "text:#{text}"
    value = e.des_encrypt(text)
    puts "des_encrypt:#{value}"
    des_decrypt = e.des_decrypt(value)
    puts "des_decrypt:#{des_decrypt}"

    puts "-------------------------"
    publickey , privatekey = e.get_rsa_key
    puts "publickey:\n#{publickey} \n privatekey=\n#{privatekey}"

    value1 = e.rsa_private_encrypt(text , privatekey)
    puts "rsa_private_encrypt:#{value1}"
    rsa_public_decrypt = e.rsa_public_decrypt(value1 , publickey)
    puts "rsa_public_decrypt:#{rsa_public_decrypt}"

    value2 = e.rsa_public_encrypt("another message" , publickey)
    puts "rsa_public_encrypt:#{value2}"
    rsa_private_decrypt = e.rsa_private_decrypt(value2 , privatekey)
    puts "rsa_private_decrypt:#{rsa_private_decrypt}"

    puts "----------------------------"
    rsa = OpenSSL::PKey::RSA.new(1024 , 7)
    value3 = rsa.private_encrypt("myself key")
    puts rsa.public_decrypt(value3)
    end

    testrun

    测试结果:
    IceskYsl@eoe ~/Desktop $ ruby encrypt.rb
    text:a secret message
    des_encrypt:羻"j}####9"q###A##
    des_decrypt:a secret message
    -------------------------
    publickey:
    -----BEGIN RSA PUBLIC KEY-----
    MIGJAoGBALrAGpm39jexyrrkYuM6kyP0z+pBlY/i3WnIYHrR3PDk9af2GsuIUwqg
    vhKRMxv5EZh1CShec++DfRAaBHwM2zCcHA1rDqrzqoSMdyCav+wbVwkSblqGb6gz
    Q4Zk/nM73mF1PaOkZvlpKN7B5H7BsUN2ngpaz4u9MxMm0Tn1guIVAgMBAAE=
    -----END RSA PUBLIC KEY-----

    privatekey=
    -----BEGIN RSA PRIVATE KEY-----
    MIICXQIBAAKBgQC6wBqZt/Y3scq65GLjOpMj9M/qQZWP4t1pyGB60dzw5PWn9hrL
    iFMKoL4SkTMb+RGYdQkoXnPvg30QGgR8DNswnBwNaw6q86qEjHcgmr/sG1cJEm5a
    hm+oM0OGZP5zO95hdT2jpGb5aSjeweR+wbFDdp4KWs+LvTMTJtE59YLiFQIDAQAB
    AoGBAKbgsSR5yfBc1J8LJP6OQhvYUM6xCngILvivEN/PltJAlvAfMDR+Pk558z9e
    NsChYcLNmoBTXuBBrEjuJuG/D0GpOmLadoZYDjlciJxj3Y9w85EvfRssdYGsBvIY
    ksHVfsYEKJXp41ORux1jZgJXsnxn9276F7Unam65mPyUleiFAkEA8LMpAfgc3y4f
    iHiDSon0AcgoIyH4eiiyxGPQEavIVgD2njRCM2pg3Z2uS3c/Et+EAaLjy9N1Cfy6
    plZRwHuXqwJBAMafCjgUQaqFisJNSUWWsENVzjmfk2pnGK1TJot3BtpN67rX1dcC
    Q3cNWbVhoF6zp6y+Kn/Lrdx1N+eNvhLOrT8CQQCl09jZuXUysVUaMWTKkrZgD+TP
    J5VHnAhlUxrDQeU4k1tU7U36nDx2Ei9FYLc8qm8IrY9hGqLUqaBx/qA+CygXAkAu
    sAGp7vEEkUFtrNcVWXdzTH8eQmlXcIZ3b302+TKOLBTGJafpU2niWSwGG72jpR07
    2LOKuKjUkmUis8nDB/vnAkAxTVKBDYhfInF1/8/bhDAeqrWLifJUmxLEmO9WSRWm
    I5ZodXZIaNOBRCSZToQSdfPbhWtQ68sWGNbI0YYwm3OZ
    -----END RSA PRIVATE KEY-----
    rsa_private_encrypt:#k4#e|########՗#F#####0 ###3
    ## õë######o#####')
    c###########m##7e¼####u $>#######hUKc(#ۯ#####Us0T#######
    rsa_public_decrypt:a secret message
    rsa_public_encrypt:t####H
    “#########’#H7############O#j####H###v#]Q`TR###Hs#U%####L###Z#####rѽ##
    ###F##(#X##˵#3####rsa_private_decrypt:another message
    —————————-
    myself key

    Encrypt & Decrypt in ruby

    require 'openssl'
    require 'digest/sha1'
    c = OpenSSL::Cipher::Cipher.new("aes-256-cbc")
    c.encrypt
    # your pass is what is used to encrypt/decrypt
    c.key = key = Digest::SHA1.hexdigest("yourpass")
    c.iv = iv = c.random_iv
    e = c.update("crypt this")
    e << c.final
    puts "encrypted: #{e}\n"
    c = OpenSSL::Cipher::Cipher.new("aes-256-cbc")
    c.decrypt
    c.key = key
    c.iv = iv
    d = c.update(e)
    d << c.final
    puts "decrypted: #{d}\n"
    
    
    require 'openssl'
    
    keyfile = 'test.key'
    certfile = 'test.crt'
    data = "this is a test"
    
    cert = OpenSSL::X509::Certificate.new(File.read(certfile))
    key = OpenSSL::PKey::RSA.new(File.read(keyfile))
    cipher = OpenSSL::Cipher::AES.new("128-CBC")
    
    tmp = OpenSSL::PKCS7.encrypt([cert], data, cipher,
    OpenSSL::PKCS7::BINARY)
    p7 = OpenSSL::PKCS7::PKCS7.new(tmp.to_der)
    
    ## Data will be stored as string so emulate that here
    p7s = p7.to_s
    
    ## Create pkcs7 object out of pkcs7 data
    p7 = OpenSSL::PKCS7::PKCS7.new(p7s)
    dec = p7.decrypt(key,cert)
    print dec

    http://nunojob.wordpress.com/2008/12/08/rsa-encrypt-decrypt-in-ruby/

    http://www.ruby-forum.com/topic/79319

  • 0 Comments
  • Filed under: Ruby&Rails
  • Page::页面

    Calendar::日历

    September 2010
    M T W T F S S
    « Aug    
     12345
    6789101112
    13141516171819
    20212223242526
    27282930  

    RSSTwitter: iceskysl