标签: ruby

Ruby 1.8.7和Net :: HTTP:使用客户端证书发出SSL GET请求?

我正在尝试通过 SSL 获取资源Net::HTTP.这是相关的代码片段:

req = Net::HTTP::Get.new(ContentURI.path)
https = Net::HTTP.new(ContentURI.host, ContentURI.port)
https.use_ssl = true
https.cert = OpenSSL::X509::Certificate.new(@cert_raw)
https.key = OpenSSL::PKey::RSA.new(@cert_key_raw)
https.verify_mode = OpenSSL::SSL::VERIFY_PEER
https.ca_file = File.join(TestDataPath, 'cacert.pem')
resp = https.start { |cx| cx.request(req) }
Run Code Online (Sandbox Code Playgroud)

或者使用备用的最后一行:

resp = https.get(ContentURI.path)
Run Code Online (Sandbox Code Playgroud)

我已经验证了各种位(证书,密钥,CA证书等)是正确的.

问题是cx.request(req)抛出一个异常:

OpenSSL::SSL::SSLError: SSL_connect SYSCALL returned=5 errno=0 state=SSLv3 read server session ticket A
Run Code Online (Sandbox Code Playgroud)

服务器上的Apache SSL错误日志包含以下内容:

[Tue Jan 24 11:47:26 2012] [debug] ssl_engine_kernel.c(1876): OpenSSL: Loop: SSLv3 read finished A
[Tue Jan 24 11:47:26 2012] [debug] ssl_engine_kernel.c(1905): OpenSSL: …
Run Code Online (Sandbox Code Playgroud)

ruby ssl certificate client-certificates net-http

9
推荐指数
1
解决办法
1万
查看次数

杰基尔的作者档案页面

我正试图在Github页面上与Jekyll创建一个多作者博客.我添加了authors数组字段_config.yml,我可以在帖子模板上使用该数据.

_config.yml:

authors:
    muratcorlu:
        display_name: Murat Corlu
        avatar: 2906955ae59c795275979d3782d7bfca
Run Code Online (Sandbox Code Playgroud)

posts.html

{% assign author = site.authors[page.author] %}

<p>Author: {{ author.display_name }}</p>
Run Code Online (Sandbox Code Playgroud)

现在我想创建一个带有URL的作者存档页面/authors/muratcorlu/(即列出由muratcorlu撰写的帖子),但我不知道如何从url获取作者姓名.

ruby jekyll

9
推荐指数
1
解决办法
1314
查看次数

带有播放列表的音乐播放器的架构,使用Rails,Redis和HTML5

我正在开发一个具有多个音乐播放列表的应用程序,每个播放列表和播放器的视图.

我已经在我的系统中使用HTML5历史记录API(用于其他功能),并将进一步使用它来防止请求之间的页面重新加载,从而停止每页上的音乐.

我仍然坚持管理玩家将在视图之间播放的曲目的最佳方法.目前,正如您所料,用户点击链接,获取曲目列表.曲目被加载到播放器中并按顺序播放,简单.然而,随着连续播放音乐,我需要确保正确播放曲目的播放列表,尽管页面上的内容不断变化,现在它是动态URL.

然而,当用户确实导航到另一页面时,按下在新播放列表中的轨道上播放,我需要能够将该项目加载到播放器中并在用户继续导航时有效地加载到播放列表的其余部分.

我正在使用Redis存储播放列表的曲目ID列表,以便快速参考以减少曲目之间的延迟.因此,我为每个播放列表设置了不同的Redis.我还根据当前曲目播放构建了我的Next和Previous Track API调用,以便Redis集中的下一首曲目可以加载到播放器中.

如上所述,虽然我无法决定引用哪个播放列表当前正在播放的最佳方式,因此播放器知道哪个Redis设置为从中调用音轨.我的想法给我留下了一些不同的想法:

a)HTML5自定义数据属性 - 我可以将当​​前播放的播放列表设置为播放器上的数据属性,并在何时更新.然后我可以在决定哪个Redis设置为加载我的下一个曲目时引用此属性.

或者,我可以将当​​前播放列表以及所有轨道(及其属性)作为JSON对象转储到页面上的数据属性中.播放列表可能长达数千首曲目但是因为源代码看起来很糟糕,更不用说可能出现的性能问题了.我对吗?

b)LocalStorage - 跨浏览器支持有限.在这种特殊情况下,对此解决方案的支持越多越好.尽管如此,我可以在用户浏览器中保存当前播放列表.这让我想知道在LocalStorage中保存跟踪JSON对象是否也是可行的,以防止额外的数据库调用.

c)在会话中 - 我可以更新会话以存储当前正在播放的播放列表的变量.

d)Redis - 我可以扩展我对Redis的使用,以保存一个引用当前播放列表名称的字符串.然后我可以在每个下一个/上一个跟踪呼叫之间进行检查.

通过写这个问题,我已经更好地了解了我将要采取的路线,但如果有人对这种情况有任何建议,那么我很乐意听取.

谢谢.

更新:我已经实现了95%的使用Redis的解决方案.虽然页面需要大约10秒才能加载,但我遇到了一些性能问题.一点也不好.

基本上每个用户都有2个播放列表:Current和Armed.每个请求都会将轨道ID加载到Redis Armed播放列表中,如果在轨道上按下播放按钮,则当前Redis播放列表将过期并替换为Armed播放列表.

然后,我的下一个和上一个按钮只需获取当前播放列表中下一首或上一首曲目的ID,然后加载播放器的音乐源.这个概念很好用,我很满意.

但是,如上所述,页面请求之间的性能很慢,需要显着改进.我的SQL被优化了,我只是提取所需的属性,并且我有必要的SQL索引,所以我正在寻找其他替代方案.

我正在考虑的选项:

  1. 如果在新页面上单击了某个曲目,则仅填充"武装"播放列表.如果用户实际上不想收听其中一个新曲目,这将节省额外的处理.

  2. 更多地使用Redis并将精益轨道对象存储在Redis播放列表中而不仅仅是轨道ID中 - 性能滞后主要在页面请求之间,而不是在实际播放轨道和导航播放列表中.

  3. 使用Redis主播放列表,其中包含Current和Armed播放列表可以从中选择的所有应用程序轨道.这可以通过每小时的rake任务来维护,并且可以防止对页面请求进行冗长的DB调用.我只是担心这会在服务器上的内存使用量和数据库中的磁道数量方面达到多大程度.

ruby architecture html5 redis ruby-on-rails-3

9
推荐指数
1
解决办法
1404
查看次数

Ruby,检查字符串是否都是有效的十六进制字符?

我必须检查一个4字符的字符串是否都是有效的十六进制,我发现另一个问题,它确切地说明我想要做什么,但它是Java:检查字符串只包含十六进制字符的正则表达式

我怎么能做到这一点?

我阅读了正则表达式的ruby文档,但是我不明白如何基于这个匹配返回true或false?

ruby

9
推荐指数
2
解决办法
5920
查看次数

Ruby/Rails - 如何防止字符转义(或之后的unescape)?

我有一些已经被转义的文本文件中的json:
"{\"hey\":\"there\"}"

当我尝试读取文件时:
File.open("\file\path.txt").read
它再次转义内容,以便现在双重转义:
"\"{\\\"hey\\\":\\\"there\\\"}\""

有办法防止逃跑吗?
或者,是否有一种简单的方法可以在读取和转义字符串后对其进行处理?

谢谢.

编辑:
答案是有道理的,但无论如何我似乎无法解析JSON.

irb(main):018:0> json
=> "\"{\\\"hey\\\":\\\"there\\\"}\"\n"  


irb(main):019:0> puts json  
"{\"hey\":\"there\"}"  
=> nil 


irb(main):017:0> x = JSON.parse(json)  
JSON::ParserError: 751: unexpected token at '"{\"hey\":\"there\"}"  
'
Run Code Online (Sandbox Code Playgroud)

意外的令牌在哪里?

谢谢.

编辑2:

这个问题得到了答案

"问题是你的文件可能是有效的JS,但它不是有效的JSON,所以JSON库倾向于拒绝它."

我相信来源(我),所以如果我跑:
x = JSON.parse(eval(json))

有用!

谢谢.

ruby escaping

9
推荐指数
2
解决办法
1万
查看次数

如何从字符串中提取包含非英语字符的URL?

这是一个简单的脚本,它带有一个带有德语URL的锚标记,并提取URL:

# encoding: utf-8

require 'uri'

url = URI.extract('<a href="http://www.example.com/wp content/uploads/2012/01/München.jpg">München</a>')

puts url
Run Code Online (Sandbox Code Playgroud)
http://www.example.com/wp-content/uploads/2012/01/M
Run Code Online (Sandbox Code Playgroud)

该extract方法停在ü.如何才能使用非英文字母?我正在使用ruby-1.9.3-p0.

ruby string url uri ruby-on-rails

9
推荐指数
1
解决办法
6544
查看次数

使用Ruby将XML请求发布到Web服务器

我担心在Web服务器上发布文档(例如XML)的经验不多,所以如果我对HTTP的理解不足,我会道歉.

我在127.0.0.1端口上的ruby应用程序中设置了一个基本的Mongrel Web服务器2000.(服务器).

我在同一台计算机上运行一个单独的Ruby应用程序.(客户端).

我需要客户端将XML文档POST到服务器.

我曾尝试使用Net :: HTTP来做到这一点,但我找不到一个明确的例子,告诉我应该做些什么.我有一个去,但遇到了错误.我已经打破了请求,使其尽可能基本:

http = Net::HTTP.new("127.0.0.1", 2000)
http.post('file', 'query=foo') #xc.rb line 6
Run Code Online (Sandbox Code Playgroud)

但它会导致以下错误

    C:/Ruby193/lib/ruby/1.9.1/net/protocol.rb:141:in `read_nonblock': An existing connection was forcibly closed by the remote host. (Errno::ECONNRESET)
    from C:/Ruby193/lib/ruby/1.9.1/net/protocol.rb:141:in `rbuf_fill'
    from C:/Ruby193/lib/ruby/1.9.1/net/protocol.rb:122:in `readuntil'
    from C:/Ruby193/lib/ruby/1.9.1/net/protocol.rb:132:in `readline'
    from C:/Ruby193/lib/ruby/1.9.1/net/http.rb:2562:in `read_status_line'
    from C:/Ruby193/lib/ruby/1.9.1/net/http.rb:2551:in `read_new'
    from C:/Ruby193/lib/ruby/1.9.1/net/http.rb:1319:in `block in transport_request'
    from C:/Ruby193/lib/ruby/1.9.1/net/http.rb:1316:in `catch'
    from C:/Ruby193/lib/ruby/1.9.1/net/http.rb:1316:in `transport_request'
    from C:/Ruby193/lib/ruby/1.9.1/net/http.rb:1293:in `request'
    from C:/Ruby193/lib/ruby/1.9.1/net/http.rb:1286:in `block in request'
    from C:/Ruby193/lib/ruby/1.9.1/net/http.rb:745:in `start'
    from C:/Ruby193/lib/ruby/1.9.1/net/http.rb:1284:in `request'
    from C:/Ruby193/lib/ruby/1.9.1/net/http.rb:1307:in `send_entity'
    from C:/Ruby193/lib/ruby/1.9.1/net/http.rb:1096:in …
Run Code Online (Sandbox Code Playgroud)

ruby post client http net-http

9
推荐指数
1
解决办法
5149
查看次数

是否可以使用Cucumber + Capybara修改样式?

所以我想要向业务展示Cucumber如何有益的方案.设置演示和运行很容易,但是如果没有适当的视觉效果,业务就不会真正看到好处......问题是:是否可以在执行功能时添加CSS类?

像这样的东西:

anchor = page.find_link(link);
anchor[:style].value = 'outline:yellow solid thick';
sleep 1;
click_link(link);
Run Code Online (Sandbox Code Playgroud)

我不确定的是第二行.如何实现一个outline style即将被点击的元素?

我在实际的黄瓜规格上找不到类似的东西.任何帮助,将不胜感激.

css ruby capybara

9
推荐指数
1
解决办法
3147
查看次数

在javascript中转义</ script>标记

我正在使用骨干,以及在页面加载时传递集合的一般方法

window.router = new Routers.ManageRouter({store: #{@store.to_json});
Run Code Online (Sandbox Code Playgroud)

这很好,效果很好,直到有人决定将文本" <script>alert("owned")</script>" 添加到其中一个商店字段.最后</script>明显关闭了javascript.怎么能绕过这个呢?

  :javascript
    $(function() {
      window.router = new Dotz.Routers.ManageRouter({store: #{@store.to_json}});
      Backbone.history.start();
    });
Run Code Online (Sandbox Code Playgroud)

以上输出:

<script>
    //<![CDATA[
      $(function() {
        window.router = new Dotz.Routers.ManageRouter({store: '{"_id":"4f3300e19c2ee41d9a00001c", "points_text":"<script>alert(\"hey\");</script>"'});
        Backbone.history.start();
      });
    //]]>
  </script>
Run Code Online (Sandbox Code Playgroud)

javascript ruby haml ruby-on-rails backbone.js

9
推荐指数
1
解决办法
4046
查看次数

工厂女孩用字符串属性键而不是符号?

当我打电话时,Factory.attributes_for(:some_class)我显然得到了该类的属性哈希.

{ :attribute_one => "hello", :attribute_two => "goodbye" }
Run Code Online (Sandbox Code Playgroud)

有没有一种方便的方法来检索带有字符串键而不是符号的属性哈希?

{ "attribute_one" => "hello", "attribute_two" => "goodbye" }
Run Code Online (Sandbox Code Playgroud)

ruby ruby-on-rails factory-bot

9
推荐指数
2
解决办法
2075
查看次数