我想将html转换为纯文本.我不想只删除标签,我想尽可能智能地保留尽可能多的格式.为<br>标签插入换行符,检测段落并将其格式化,等等.
输入非常简单,通常是格式良好的html(不是整个文档,只是一堆内容,通常没有锚点或图像).
我可以把几个正则表达式放在一起,让我80%,但想到可能有一些现有的解决方案具有更多的智能.
我有一个使用delayed_job的rails应用程序.我需要我的工作相互沟通,例如"任务5完成"或"这是任务5需要处理的事项列表".
现在我有一个特殊的表,我总是访问事务中的表.它工作正常.我想为它构建一个更干净的api/dsl,但首先要检查是否已有解决方案.奇怪的是,我没有发现任何一件事,我要么谷歌搜索完全错误,要么任务如此简单(在事务中设置和获取值),没有人已经抽象出来了.
我错过了什么吗?
澄清:我不是在寻找一个新的排队系统,我正在寻找一种方法来让后台任务相互沟通.基本上只是安全地共享变量.以下框架是否提供此功能?延迟工作没有,这是一种耻辱.
用例: "并行完成这5项任务,然后当它们全部完成时,完成这1项最终任务." 因此,5个任务中的每个任务都会检查它是否是最后一个,如果是,它将触发最终任务.
我遇到了这种行为,并想知道是否有其他人看过它.我有一个解决方法,所以它不是一个显示阻止.
我在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一起工作).
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) Unicorn称这是"快速客户".每当我阅读详细说明时,这都被解释为它适用于例如服务于http请求的nginx代理服务器,而不是用于运行长轮询的应用程序.
好的,有意义,但是更常见的情况是请求"慢"是指POST需要很长时间,因为它会流式传输大量数据(文件上传)或者因为操作会调用应用程序中的处理这需要很长时间.
Unicorn如何在这两种情况下表现?我在哪里可以阅读更多相关信息?
如果在一定时间后没有完成,我想要一个我创建的线程.有没有优雅和/或惯用的方式来做到这一点?现在我正在考虑做一个观察者线程:
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) 我在s3上有一堆文件.我使用.fog配置文件设置了雾,因此我可以启动fog并获得提示.现在,如果我知道它的路径,我如何在s3上访问和编辑文件?
我正在使用官方的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错误.如果文件名中没有逗号或撇号,它可以正常工作.
有没有办法处理这个,而不需要首先限制文件名?
我有一个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 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 ×9
amazon-s3 ×2
unicorn ×2
activerecord ×1
bigdecimal ×1
delayed-job ×1
fog ×1
heroku ×1
hpricot ×1
html-parsing ×1
interprocess ×1
nokogiri ×1
rack ×1
staging ×1
thin ×1