小编Joh*_*hir的帖子

使用ruby将HTML转换为纯文本并维护结构/格式

我想将html转换为纯文本.我不想只删除标签,我想尽可能智能地保留尽可能多的格式.为<br>标签插入换行符,检测段落并将其格式化,等等.

输入非常简单,通常是格式良好的html(不是整个文档,只是一堆内容,通常没有锚点或图像).

我可以把几个正则表达式放在一起,让我80%,但想到可能有一些现有的解决方案具有更多的智能.

ruby hpricot beautifulsoup html-parsing nokogiri

5
推荐指数
1
解决办法
3851
查看次数

在ruby中有哪些可用的消息解决方案用于进程间通信?

我有一个使用delayed_job的rails应用程序.我需要我的工作相互沟通,例如"任务5完成"或"这是任务5需要处理的事项列表".

现在我有一个特殊的表,我总是访问事务中的表.它工作正常.我想为它构建一个更干净的api/dsl,但首先要检查是否已有解决方案.奇怪的是,我没有发现任何一件事,我要么谷歌搜索完全错误,要么任务如此简单(在事务中设置和获取值),没有人已经抽象出来了.

我错过了什么吗?

澄清:我不是在寻找一个新的排队系统,我正在寻找一种方法来让后台任务相互沟通.基本上只是安全地共享变量.以下框架是否提供此功能?延迟工作没有,这是一种耻辱.

用例: "并行完成这5项任务,然后当它们全部完成时,完成这1项最终任务." 因此,5个任务中的每个任务都会检查它是否是最后一个,如果是,它将触发最终任务.

ruby ruby-on-rails interprocess delayed-job

5
推荐指数
1
解决办法
1182
查看次数

Heroku RACK_ENV在Thin上说"开发",但在Unicorn上"演出"

我遇到了这种行为,并想知道是否有其他人看过它.我有一个解决方法,所以它不是一个显示阻止.

我在Heroku上用Cedar堆栈创建了一个新的应用程序.在演示多个环境时,我添加了以下config var:

heroku config:add RACK_ENV=staging --app appname

我在视觉上验证了环境var的设置,然后在我的简单Sinatra示例中放入以下路由:

get '/?' do
  ENV['RACK_ENV']
end
Run Code Online (Sandbox Code Playgroud)

当我在笔记本电脑上进行本地测试时,我收到了预期development.

当我推到Heroku并在herokuapp.com上点击相同的路线时,我得到了development而不是staging.

我通过Procfile将Web服务器从Thin切换到Unicorn,并将更改推回到Heroku.

现在,当我到达路线时,我得到了预期staging.

有没有人见过这个?我在另一个运行Thin的项目上的解决方法是关闭New Relic应用程序名称的环境.(我没有切换到Unicorn,因为我需要New Relic来工作,目前Cedar和New Relic和Unicorn一起工作).

ruby heroku thin staging unicorn

5
推荐指数
1
解决办法
4850
查看次数

在ActiveRecord关系上定义自定义查找程序方法?

Foohas_many Bar.我想做的事情如下:

foo_instance.bars.find_with_custom_stuff(baz)
Run Code Online (Sandbox Code Playgroud)

如何定义find_with_custom_stuff以便在bars关系中可用?(而不只是一个Bar类方法?)

更新

我想做一些比范围更复杂的事情.就像是:

def find_with_custom_stuff(thing)
  if relation.find_by_pineapple(thing)
    relation.find_by_pineapple(thing).monkey
  else
    :banana
  end
end
Run Code Online (Sandbox Code Playgroud)

ruby activerecord ruby-on-rails

5
推荐指数
1
解决办法
4833
查看次数

Unicorn认为什么是"快速"和"慢"请求?

Unicorn称这是"快速客户".每当我阅读详细说明时,这都被解释为它适用于例如服务于http请求的nginx代理服务器,而不是用于运行长轮询的应用程序.

好的,有意义,但是更常见的情况是请求"慢"是指POST需要很长时间,因为它会流式传输大量数据(文件上传)或者因为操作会调用应用程序中的处理这需要很长时间.

Unicorn如何在这两种情况下表现?我在哪里可以阅读更多相关信息?

ruby rack unicorn

5
推荐指数
1
解决办法
2064
查看次数

如何在一定时间后杀死红宝石线?

如果在一定时间后没有完成,我想要一个我创建的线程.有没有优雅和/或惯用的方式来做到这一点?现在我正在考虑做一个观察者线程:

def myfunc
  t = Thread.new{
    #do stuff
  }

  # watcher thread
  Thread.new{
    result = t.join(20) # join returns nil if it timed out
    t.kill if result.nil?
  }

  # continue on asynchronously from both threads
end
Run Code Online (Sandbox Code Playgroud)

ruby multithreading

5
推荐指数
1
解决办法
3603
查看次数

如何使用雾来编辑s3上的文件?

我在s3上有一堆文件.我使用.fog配置文件设置了雾,因此我可以启动fog并获得提示.现在,如果我知道它的路径,我如何在s3上访问和编辑文件?

ruby amazon-s3 fog

5
推荐指数
1
解决办法
4506
查看次数

文件名中的特殊字符影响aws-sdk ruby​​ gem url_for方法

我正在使用官方的AWS ruby​​ gem for S3,我在使用"url_for"方法时遇到问题,因为它们中包含特殊字符的文件(即逗号,撇号).我正在使用最新的aws-sdk gem用于ruby,我的代码如下所示:

s3 = AWS::S3::new
bucket = s3.buckets[bucket]
object = bucket.objects[object_address]
object_url = object.url_for(:read, :expires => 60*60, :secure => true)
Run Code Online (Sandbox Code Playgroud)

正确找到该对象,但是我从url_for获取的URL给出了HTTPError:404 Not Found错误.如果文件名中没有逗号或撇号,它可以正常工作.

有没有办法处理这个,而不需要首先限制文件名?

ruby ruby-on-rails amazon-s3 ruby-on-rails-3

5
推荐指数
1
解决办法
1408
查看次数

设置Cloudfront永远不会重新获取资产

我有一个Rails应用程序,它使用Cloudfront作为其CDN和sprockets来压缩资产并设置长Cache-Control标头.

对资产的第一个请求给我响应头像这样:

Cache-Control:public, max-age=31536000
Connection:close
Content-Encoding:gzip
Content-Type:application/javascript
Etag:"892a3afb514e3c84646835f9ef101026"
Last-Modified:Tue, 17 Jan 2012 16:05:17 GMT
Server:thin 1.2.11 codename Bat-Shit Crazy
Vary:Accept-Encoding
Via:1.0 c662f4e5a3bc7b224ce1bbecb0a23d82.cloudfront.net:11180 (CloudFront), 1.0 fc4797024fafe16fcc03e892c23f078d.cloudfront.net:11180 (CloudFront)
X-Amz-Cf-Id:bd2a89fb81bba2513f30d6940347693ef483defb4783da06d81b002af23545c39b9176b2c7cb144f,VF69FYlYU8ezzHQp7QkU2GvEQ8NmDqEwRX-wu7H63yNqE1ZlTaAq3g==
X-Cache:Miss from cloudfront
X-Runtime:0.012413
X-Ua-Compatible:IE=Edge,chrome=1

完善.它错过了Cloudfront的缓存,从我的应用程序中获取了缓存,因此它应该从现在开始加载它.

现在......如果我刷新页面,我会收到以下响应标题:

Connection:keep-alive
Server:thin 1.2.11 codename Bat-Shit Crazy
Via:1.0 86123d99569c9296c8605243e9a10621.cloudfront.net:11180 (CloudFront), 1.0 de9fc23d505dae3d19973a98bfa1eba0.cloudfront.net:11180 (CloudFront)
X-Amz-Cf-Id:a7bf6ffb30c43d306835190d210aeb8ec794c1ff619ad7aaecbad220c1822fe165bda624ae8382e1,bcij_88KOAvLPSqEKDRSvOBjEj7atiKBCAjSbqc2cfdb-BHOTi--LA==
X-Cache:RefreshHit from cloudfront
X-Runtime:0.006909
X-Ua-Compatible:IE=Edge,chrome=1

看起来它打到了Cloudfront.我得到了304 not modified.所以我似乎并没有再次下载文件,但我发现这个请求也是我的源服务器.

为什么会这样?Cloudfront现在不应该始终缓存我的资产吗?我正在对我的资产进行版本控制,所以除了第一个请求之外,我真的绝不希望从服务器获取它.有什么办法可以强迫这种行为吗?

ruby-on-rails cache-control amazon-cloudfront

5
推荐指数
1
解决办法
1248
查看次数

BigDecimal在1.8对1.9

当升级到ruby 1.9时,我在比较预期值与实际值之间时遇到了失败的测试,BigDecimal这是划分Float的结果.

expected: '0.495E0',9(18)
got:      '0.4950000000 0000005E0',18(27)

谷歌搜索"bigdecimal ruby​​ precision"和"bigdecimal changes ruby​​ 1.9"之类的东西并没有让我感到满意.

BigDecimal红宝石1.9中的行为是如何变化的?

更新1

> RUBY_VERSION
=> "1.8.7"
> 1.23.to_d
=> #<BigDecimal:1034630a8,'0.123E1',18(18)>

> RUBY_VERSION
=> "1.9.3"
> 1.23.to_d
=> #<BigDecimal:1029f3988,'0.123E1',18(45)>
Run Code Online (Sandbox Code Playgroud)

18(18)和18(45)是什么意思?精确的我想象,但是符号/单位是什么?

更新2

代码正在运行:

((10 - 0.1) * (5.0/100)).to_d
Run Code Online (Sandbox Code Playgroud)

我的测试期望它与(==)相等:

0.495.to_f
Run Code Online (Sandbox Code Playgroud)

这通过1.8,在1.9.2和1.9.3下失败

ruby bigdecimal

5
推荐指数
1
解决办法
1507
查看次数