我的问题类似于以下内容,但情况略有不同.
我的设置是:
在Heroku Cedar上运行.MongoDB在MongoLab上托管.
错误分批进行,并且通常由Heroku进程重启来解决.第一个通常是下面的那个:
An ActionView::Template::Error occurred in [controller]#[action]:
execution expired
vendor/bundle/ruby/1.9.1/gems/moped-1.4.2/lib/moped/sockets/connectable.rb:46:in `read'
Run Code Online (Sandbox Code Playgroud)
以下是堆栈跟踪的最高位.如果需要,很乐意添加更多!
vendor/bundle/ruby/1.9.1/gems/moped-1.4.2/lib/moped/sockets/connectable.rb:46:in `read'
vendor/bundle/ruby/1.9.1/gems/moped-1.4.2/lib/moped/sockets/connectable.rb:46:in `block in read'
vendor/bundle/ruby/1.9.1/gems/moped-1.4.2/lib/moped/sockets/connectable.rb:118:in `handle_socket_errors'
vendor/bundle/ruby/1.9.1/gems/moped-1.4.2/lib/moped/sockets/connectable.rb:46:in `read'
vendor/bundle/ruby/1.9.1/gems/moped-1.4.2/lib/moped/connection.rb:177:in `read_data'
vendor/bundle/ruby/1.9.1/gems/moped-1.4.2/lib/moped/connection.rb:99:in `block in read'
vendor/bundle/ruby/1.9.1/gems/moped-1.4.2/lib/moped/connection.rb:202:in `with_connection'
vendor/bundle/ruby/1.9.1/gems/moped-1.4.2/lib/moped/connection.rb:97:in `read'
vendor/bundle/ruby/1.9.1/gems/moped-1.4.2/lib/moped/protocol/query.rb:163:in `receive_replies'
vendor/bundle/ruby/1.9.1/gems/moped-1.4.2/lib/moped/connection.rb:135:in `block in receive_replies'
vendor/bundle/ruby/1.9.1/gems/moped-1.4.2/lib/moped/connection.rb:134:in `map'
vendor/bundle/ruby/1.9.1/gems/moped-1.4.2/lib/moped/connection.rb:134:in `receive_replies'
vendor/bundle/ruby/1.9.1/gems/moped-1.4.2/lib/moped/node.rb:553:in `block (2 levels) in flush'
vendor/bundle/ruby/1.9.1/gems/moped-1.4.2/lib/moped/node.rb:129:in `ensure_connected'
vendor/bundle/ruby/1.9.1/gems/moped-1.4.2/lib/moped/node.rb:551:in `block in flush'
vendor/bundle/ruby/1.9.1/gems/moped-1.4.2/lib/moped/node.rb:566:in `logging'
vendor/bundle/ruby/1.9.1/gems/moped-1.4.2/lib/moped/node.rb:550:in `flush'
vendor/bundle/ruby/1.9.1/gems/moped-1.4.2/lib/moped/node.rb:539:in `process'
vendor/bundle/ruby/1.9.1/gems/moped-1.4.2/lib/moped/node.rb:349:in `query'
vendor/bundle/ruby/1.9.1/gems/moped-1.4.2/lib/moped/cursor.rb:138:in `block in load_docs'
vendor/bundle/ruby/1.9.1/gems/moped-1.4.2/lib/moped/session/context.rb:105:in `block in …Run Code Online (Sandbox Code Playgroud) 所以我正在努力改进我的测试执行时间,并且一直在遵循一些优秀的建议(最值得注意的是,Railscasts 412).
Zeus似乎工作得很好(除了需要你输入zeus test test才能运行Minitest套件的奇怪之外.)
这是zeus的定时输出:
基线(佣金测试):
$ time rake test
Run options: --seed 62848
# Running tests:
........
Finished tests in 0.117071s, 68.3346 tests/s, 68.3346 assertions/s.
8 tests, 8 assertions, 0 failures, 0 errors, 0 skips
real 0m5.771s
user 0m4.477s
sys 0m0.872s
Run Code Online (Sandbox Code Playgroud)
和宙斯一起:
$ time zeus test test
Run options: --seed 10325
# Running tests:
........
Finished tests in 0.126365s, 63.3087 tests/s, 63.3087 assertions/s.
8 tests, 8 assertions, 0 failures, 0 errors, 0 skips
real …Run Code Online (Sandbox Code Playgroud) 哇 - 很多项目都包含在这个中,而且我做了一些(广泛的)搜索无济于事,所以抛出一个耀斑,看看是否有其他人正在使用类似的堆栈并有一个解决方案.
我正在使用支持Mongoid的ActiveAdmin分支为Rails 3应用程序构建管理界面.
到目前为止,ActiveAdmin(使用Formtastic构建其表单)似乎正在发挥作用.但是当我试图将这个堆栈与Mongoid embeds_many和embedded_in关系一起使用时,我遇到了麻烦.我想成为一个好公民,并使用适当的数据建模技术与Mongo,但Formtastic似乎不想发挥.
我将分享我得到的具体错误,尽管它可能是深奥的.
如果我不能挖了一个很好的解决方案,我要把它吸上来,只是用has_many和belongs_to,虽然我知道我会被放弃的MongoDB的主要好处(应用程序将不会大到足以有欠缺连接/多个查询是一个问题,但我认为我从一开始就以正确的方式做事!).
class Location
include Mongoid::Document
embeds_many :events
field :venue_name, type: String
end
class Event
include Mongoid::Document
embedded_in :location
field :event_name, type: String
end
ActiveAdmin.register Event do
form do |f|
f.inputs do
f.input :event_name
f.input :location, :as => :select
end
f.buttons
end
Run Code Online (Sandbox Code Playgroud)
它在线上窒息f.input :location并抛出:
ActionView::Template::Error (undefined method `event_id' for #<Event:0x007fa4224a20e0>):
1: insert_tag renderer_for(:new)
Run Code Online (Sandbox Code Playgroud)
我改变了:as => :select对:as => :check_boxes,实际上得到它,以显示正确的位置(虽然为复选框,不选择或收音机).但是在提交表格后,我接受了一个: …
我刚刚在一个长期存在的域上启动了一个生产 Rails 应用程序(在 Heroku 上),当然,现在它面向广泛开放的网络,我正在收集尝试脚本小子的所有碎片。
我有任何异常通过电子邮件发送给我,我已经设法捕获(rescue_from)所有标准错误,但是每天都会出现几次:
An URI::InvalidURIError occurred in #:
bad URI(is not URI?): http://www.myapp.com/assets/,data:n,complete:function(e,t)
{r&&u.each(r,o||[e.responseText,t,e])}}).done(function(e){o=arguments,u
vendor/ruby-1.9.3/lib/ruby/1.9.1/uri/common.rb:176:in `split'
-------------------------------
Request:
-------------------------------
* URL : http://myapp.com/assets/,data:n,complete:function(e,t)
{r&&u.each(r,o||[e.responseText,t,e])}}).done(function(e){o=arguments,u.html(i?v(
* IP address: 195.241.58.105
* Parameters: {"v("=>nil, "path"=>"assets/,data:n,complete:function(e,t){r&&u.each(r,o||
[e.responseText,t,e])}}).done(function(e){o=arguments,u", "format"=>"html(i"}
* Rails root: /app
* Timestamp : 2013-02-26 16:53:51 UTC
Run Code Online (Sandbox Code Playgroud)
所以从我未经训练的眼睛来看,这看起来像是脚本小子试图尝试某种漏洞(或?)
我的问题:
1)这是一个我不确定“轨道魔法”能走多远的领域——我需要做些什么吗?我真的不喜欢外部力量仅从请求中就能够在我的应用程序中导致异常。我应该拯救 URI::InvalidURIError 异常并抛出 404 吗?还有什么我应该做的吗?每个人都会出现这种情况吗?
2)是否配置错误,或者这只是应用程序的标准“库存生产”行为?我正在运行 Rails 3.2.12(截至本文发布的最新补丁版本)。
提前感谢您的任何建议!
编辑:添加一些关于请求的更多细节,正如克里斯蒂安在下面指出的那样,可能不是脚本小子?不管怎样,我很好奇。
第二个要求:
An URI::InvalidURIError occurred in #:
bad URI(is not URI?): http://www.myapp.com/assets/&&!yt.test(e)&&
(v.support.htmlSerialize||!wt.test(e))&&
(v.support.leadingWhitespace||!pt.test(e))&&!Nt[(vt
vendor/ruby-1.9.3/lib/ruby/1.9.1/uri/common.rb:176:in `split'
-------------------------------
Request:
-------------------------------
* URL : …Run Code Online (Sandbox Code Playgroud) 是否可以配置'rake test'以在遇到故障/异常时立即停止运行测试?
我的设置:
我想启动测试套件并在测试失败时立即停止 - 默认行为是继续运行所有测试,在某些情况下,数据太多(特别是一个小错误导致大量测试突然失败.)
我有一个很好的小设置与旧版Minitest(4.x)和Turn gem遵循这个要点:( 为minitest/turn/minitest-rails添加一个简单的fail-fast选项),但我正在工作在一个新的Rails 4.1应用程序上,Turn与Minitest 5(尚未)兼容.
有什么想法吗?