• #36 楼 @zj0713001 非常感谢。我又在忙着造另外一个脚本呢。所以这个脚本暂时没时间改造了。但是后期必须改造的 另外@donnior 兄这个改造是相当牛了。从 method 的 name 都帮我改了。灰仓之感谢~

  • #28 楼 @zj0713001 非常感谢,您的代码真是不错。我就膜拜了~

  • #26 楼 @zj0713001 哦。好的。以后改正,谢谢~

  • #21 楼 @zj0713001 两行看起来更习惯(个人)

    书是吞了一本 rails 的。看得没那么仔细。没有很多时间去学习,只能边学边搞了~

    总的来说灰仓感谢~

  • #19 楼 @zlx_star 兄弟,感谢感谢了啊~这个代码先放一下。我要去搞 ruby 跟 dubbo 的 hessian 通讯了~回头我会按照各位的建议发了一个优化版本,然后大家继续鞭斥~

  • #17 楼 @zlx_star 非常感谢~我去看一下~

  • #15 楼 @wppurking 谢谢,虽然只是一个脚本,但是在做数据迁移的时候就会用到,不是很频繁。但是会不定期持续使用,再者本人觉得代码实在是太烂了。所以就发上来,烦请各位大大帮忙找 bug,我会进一步按照各位的 建议去持续修改代码~。虽然是小东西,但是里面所包含的一些问题是通用的,因为刚开始学,对很多东西不是很确定。而各位的建议正好给我一个方向,指出了我的错误,帮助我成长~非常感谢~

  • #13 楼 @neverlandxy_naix 新手。我可以告诉你这是我的第二个在生产环境上使用的 ruby 程序么~在搞 rails,但是还没太明白。所以,为了追求“先把活干了”所以就直接这么好了~ 好的东东,老兄推荐啊~不胜感激~

  • #11 楼 @kungs 因为是新手。加之 ActiveRecord 还没弄明白怎么样跟已有的数据库结合起来使用。所以就没用了。直接的写 sql 了。哥们,谢谢你的例子。我抽空改用这种方式吧。

  • 大家可以把我这个代码作为最烂代码实践。来给新手普及下如何不要写出这么烂的代码~

  • 灰常感谢各位。已经格式化了 烦请@wppurking 删掉您的~,尽量让大家的讨论集中点。谢谢了~

  • #2 楼 @chenge 代码已经贴出来了。欢迎大家点评,批评。鞭斥~ 只求长进~谢谢~

  • #!/usr/bin/env ruby
    # encoding: utf-8
    #copy tag from test env to prod env
    require 'mysql2'
    class TagCopy
      def initialize
        @from_db = Mysql2::Client.new(:host => "192.168.xx.xx", :port => 3306, :username => "mysql", :password => "mysql", :database => "mydb")
        @to_db = Mysql2::Client.new(:host => "192.168.xx1.xx2", :port => 3306, :username => "root", :password => "root", :database => "mydb")
      end
    
      def get_tag_by_key(tag_key)
        #escape param to defend sql injection
        param = @from_db.escape(tag_key)
        sql = "" "SELECT id,no,tag_key,tag_name,tag_url,tag_desc,structure,type,isleaf,child,level, brand_no,category_no,channel_no,other_no,
                        row_num, site,sort_no, ad_quantity, image_size,parent_id,enable_more FROM tbl_cms_tags where tag_key = '#{param}' " "";
        puts sql
        results = @from_db.query(sql)
        uuid =@to_db.query("SELECT REPLACE(UUID(),'-','')", :as => :array)
        uuid = uuid.to_a[0]
        puts "total #{results.count} records "
        sql_root_id = "select id from tbl_cms_tags where tag_key ='ol_main'"
        rid = @to_db.query(sql_root_id)
        srid = rid.to_a[0]
    
        results.each do |row|
          #puts row.inspect
          add_tag(row,uuid[0],srid[0])
          if row["child"] >0
            getChild(uuid[0],row["id"])
          end
        end
        @from_db.close
        @to_db.close
      end
    
      def getChild(new_pid,parent_id)
        sql = "" "SELECT id,no,tag_key,tag_name,tag_url,tag_desc,structure,type,isleaf,child,level, brand_no,category_no,channel_no,other_no,
                        row_num, site,sort_no, ad_quantity, image_size,parent_id,enable_more FROM tbl_cms_tags where parent_id = '#{parent_id}' " "";
        results = @from_db.query(sql);
    
        results.each do |row|
          uuid =@to_db.query("SELECT REPLACE(UUID(),'-','')", :as => :array);
          uuid = uuid.to_a[0]
          add_tag(row,uuid[0],new_pid)
          #puts row.inspect
          if row["child"] >0
            getChild(uuid[0],row["id"])
          end
    
        end
      end
    
    
      def add_tag(row,id,parent_id)
        site = row["site"]?row["site"] : 0
        row_num = row["row_num"]?row["site"] : 1
        sort_no = row["sort_no"]?row["sort_no"] :0
        insert_sql ="" "INSERT INTO yitian_b2c_db.tbl_cms_tags
            (id,no,tag_key,tag_name,tag_url,tag_desc,structure,type,isleaf,child,level,brand_no,category_no,channel_no,other_no,row_num,site,sort_no,ad_quantity,image_size,parent_id,enable_more)
            VALUES
            ('#{id}','#{row["no"]}','#{row["tag_key"]}','#{row["tag_name"]}','#{row["tag_url"] }','#{row["tag_desc"] }','#{row["structure"] }',
            '#{row["type"] }','#{row["isleaf"] }',#{row["child"] },#{row["level"] },'#{row["brand_no"] }','#{row["category_no"] }','#{row["channel_no"] }',
            '#{row["other_no"] }',#{row_num},#{site},#{ sort_no  },0,#{row["image_size"]},'#{"#{parent_id}"}',#{row["enable_more"] }) " ""
        puts insert_sql
        @to_db.query(insert_sql)
      end
    end
    
    if __FILE__ == $0
      tc = TagCopy.new
      tc.get_tag_by_key("ol_index")
    end
    
  • 同志。本人教育学毕业,会 java,正在努力攻读 ruby。可以做兼职么。ps:不要工资的,纯粹兴趣爱好~ 主要是看好教育这一块~

  • 有质量的帖子还是很重要的

  • 求推荐机械键盘 at 2013年03月06日

    是不是有了这个键盘,bug 几率就会减少呢。。话说之前一直不懂什么叫机械。。。今天还专门 google 了一把。哈哈

  • 哈哈。哈哈。过一会儿就有 pdf 了哈

  • 确实很心动,但是太远了 目前没有折腾的心思啊

  • #29 楼 @yorzi 哈哈。。

  • #10 楼 @yorzi 你现在在西安做什么啊。我过 2 年也回来。回来了跟你混 ruby 啊

  • 我想问 大师对于 Ruby 不同版本的语法变化比较大(甚至不兼容)这方面在后期有什么样的计划~,后期会不会稳定下来,例如 ruby1.8 和 1.9 python2.7 和 3.0。刚开始接触 ruby,别的谈不上来~但是感觉 ruby 和 python 就在版本兼容性上真的很令人抓狂~

  • #8 楼 @jjym 呵呵,好的。谢谢大家的关注啊

  • 额。好的,非常感谢。我还以为我的什么信息没填全呢。我看了也觉得没什么遗漏了,呵呵

  • #6 楼 @jjym 这个编译后指令,我怎么去看啊~ 刚接触 ruby,还是很不懂啊~发现跟 java 完全不一样了啊~

  • 不知道这个我理解的对不对。即使这个理解是正确的,我还是无法明白 x,y=y,x 这样赋值会交换,x 和 y

  • @Tony612 我又做了一个试验。如果单个赋值的话按正常理解没有任何问题 irb(main):001:0> x=1 => 1 irb(main):002:0> y=2 => 2 irb(main):003:0> x.object_id => 3 irb(main):004:0> y.object_id => 5 irb(main):005:0> x=y => 2 irb(main):006:0> x.object_id => 5 irb(main):007:0> y => 2 irb(main):008:0> y.object_id => 5 irb(main):009:0> y=x => 2 irb(main):010:0> y.object_id => 5 irb(main):011:0> puts x,y 2 2

  • #1 楼 @Tony612 非常感谢您的回答。您这个代码很不错~非常感谢。另外,从您的例子来看 1.9.3-p362 :006 > x, y = y, x => [2, 1] 1.9.3-p362 :007 > x.object_id => 5 1.9.3-p362 :008 > y.object_id => 3

    其实底层是 object_id 做了交换!或许在解释器执行的时候存在过一个临时 的 temp,ruby 把这部分工作也做了?

    欢迎继续讨论,新手问题,望各位不吝赐教,在此先谢过了

  • #10 楼 @yorzi 我也在北京,不过也准备 回老家西安了。发现西安招 Ruby 的人也好少阿~