小编23t*_*tux的帖子

使用rails 3和remote => true进行设计

我在使用AJAX登录设计时遇到问题.我正在使用:remote => truejavascript助手的选项和jQuery版本(https://github.com/rails/jquery-ujs).用户输入正确的信息后,会在会话视图中呈现我的create.js.erb.这没关系,因为我可以在这个文件中使用JS重定向我的用户.但是当发生错误时,例如用户输入错误信息时,只有闪存消息在响应中并带有错误代码401 - Unauthorized.因此,不会呈现视图或create.js.erb或其他.但是我想通过在侧面显示它来处理这个消息,以便用户获得一些反馈,但是错误.

我还尝试用自己的自定义控制器实现respond_to :js,并使用:recallwarden身份验证的方法.但它不起作用.

有没有人知道解决这个问题的一些最佳实践?或者我应该避免使用这种帮助方法,只使用纯jQuery进行ajax调用?

thx,tux

javascript jquery ruby-on-rails devise

8
推荐指数
1
解决办法
4453
查看次数

开源新Relic替代品

我正在寻找New Relic的开源替代品.我可以自己安装我的rails开发和生产应用程序,分析我的查询,渲染时间......有很多服务,其中大部分都有免费计划.但是我希望自己主持这个东西,安装它进行开发,以便在它投入生产之前分析我的应用程序.

有什么建议?

performance ruby-on-rails newrelic

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

AngulrJS + Grunt +量角器:keepAlive和watch

我目前正在使用我的AngularJS应用程序和Grunt中的E2E测试和Protractor.我按照https://www.npmjs.org/package/grunt-protractor-runner的安装,我有2个问题:

第一:

我想知道,如果有可能的话,我可以通过Karma的单元测试获得这种行为:

  • 启动测试服务器
  • 运行所有测试
  • 当测试文件或任何其他html/js文件发生更改时,请重新运行所有测试

我非常喜欢实时监视和自动重新加载,因为它减少了整个套件的启动时间,并使一切变得更快.

但是使用Protractor,我遇到了一个问题:每次我用Grunt开始测试时,测试都会执行,然后一切都会关闭.虽然,我将keepAlive选项设置为我true的量角器配置部分Gruntfile.js.有任何想法吗?

第二:

我无法让它工作,将Protractor连接到我的角度应用程序.我是否必须启动grunt服务器来提供文件?当我尝试在我的测试中访问某个页面时,browser.get('app/index.html');或者browser.get('#/');,我无法访问该页面.我玩过我的baseUrl选项(比如baseUrl: 'http://localhost:' + (process.env.HTTP_PORT || '8000'))protractor.conf.js.但对我而言,我必须先启动grunt服务器,我是对的吗?我怎么能这样做?或者还有其他选项可以访问我的角度应用程序?我正在使用带指南针的萨斯,所以我想,我需要compass:dist以某种方式获得这些目标.

更新:

我找到了一个解决方法.我注册了以下grunt任务:

  grunt.registerTask('e2e', [
    'clean:server',
    'concurrent:test',
    'autoprefixer',
    'connect:test',
    'concurrent:server',
    'autoprefixer',
    'protractor',
    'watch'
  ]);
Run Code Online (Sandbox Code Playgroud)

grunt e2e我的服务器启动时,基于baseUrl: 'http://10.0.0.200:9001'我的内部protractor.conf.js,我的测试正在运行.测试完成后,watch任务会监视已更改的文件,并在需要时重新运行量角器.

这样做的缺点是,每次watch启动protractor任务时,都会生成一个新的Chrome实例,并在测试结束后终止.有没有办法防止量角器杀死Chrome实例?

此外,我想知道为什么在每个教程中它总是说"只是运行grunt protractor,你的测试被执行......".为什么我需要一个额外的任务来启动我的grunt服务器来访问我的angularjs应用程序?

这是我的配置文件:

protractor.conf.js

exports.config = {
  capabilities: {
    'browserName': 'chrome'
  }, …
Run Code Online (Sandbox Code Playgroud)

javascript angularjs gruntjs protractor

8
推荐指数
1
解决办法
6761
查看次数

Karma茉莉花测试:在终端突出显示差异

我正在使用Karma和Jasmine进行测试.在某些测试中,我有大量的测试依赖的对象.当我做的事情

expect(obj).toEqual(expectedObj);
Run Code Online (Sandbox Code Playgroud)

并且obj != expectedObj,我在终端中收到错误消息.但是这个错误确实很长,因为它包含了两个对象,并且很难看出这两个对象在哪些部分是不同的.

那么,终端是否有任何荧光笔,可以与业力一起使用?通过这种方式,可以更容易地弄清楚,出了什么问题.

javascript testing jasmine karma-runner

8
推荐指数
1
解决办法
1029
查看次数

Backbone.js与Rails

我正在尝试Backbone.js和rails应用程序.我的问题是,我不知道如何使用我的rails应用程序实现Backbone控制器和视图.我已经阅读了很多教程,但他们总是在backbone.js中只使用一个控制器.

例如,我在轨道中有两个控制器.

  • 活动控制员
    • 包括两个视图,谷歌地图和搜索字段.谷歌地图插入骨干视图,搜索域是HTML格式,并通过骨干视图获取其功能.
    • 搜索字段应从我的rails模型中获取数据并在地图内显示标记.

而另一个是

  • 用户控制器
    • 在这里查看用户配置文件,我想添加一些ajax功能,如更新值和其他东西

在我的application.js中,我使用启动应用程序

var App = {
  Views: {},
  Controllers: {},
  Collections: {},
  init: function() {
      new App.Controllers.Activities();
      new App.Controllers.Users();
      Backbone.history.start();
  }
};

$(function() {
  App.init();
});
Run Code Online (Sandbox Code Playgroud)

问题是,我不需要我的用户配置文件中的活动控制器和Rails活动控制器中的用户控制器.我该怎么解决这个问题?我应该尝试在javascript中读取当前的URL,然后决定使用哪个控制器吗?或者我应该将JavaScript文件放入application.html.erb然后决定应该使用哪个控制器?

或者这是使用backbone.js控制器的错误方法?

我对backbone.js的结构有点错误吗?或者我是以错误的方式使用控制器?

另一个问题是,如何通过Backbone.js添加小JavaScript,特别是jQuery功能?例如,当用户单击该字段时,我想删除字段内的标签.或者我想做一些标签功能,只是切换一些元素的可见性.我应该为每个使用javascript的元素创建一个Backbone视图吗?或者这是否过载?

希望我明确表示,任何人都可以提供帮助,谢谢!

ruby-on-rails backbone.js

7
推荐指数
1
解决办法
4936
查看次数

AngularJS ui-router:测试ui-sref

我正在尝试测试一些视图,这些视图<a ui-sref='someState'>link</a>用于链接到我的应用程序中的其他状态.在我的测试中,我触发了对这些元素的点击,如下所示:

element.find('a').click()
Run Code Online (Sandbox Code Playgroud)

如果状态切换到,我该如何测试someState$state在我的控制器中使用时会很容易:

// in my view
<a ng-click="goTo('someState')">link</a>

// in my controller
$scope.goTo = function(s) {
  $state.go(s)
};

// in my tests
spyOn($state, 'go');
element.find('a').click()
expect($state.go).toHaveBeenCalled()
Run Code Online (Sandbox Code Playgroud)

但是当我使用时,我ui-sref不知道要窥探什么对象.如何验证我的应用程序处于正确的状态?

jasmine angularjs angular-ui-router

7
推荐指数
1
解决办法
1602
查看次数

在拨打超级电话时不要传递阻止

如何为super通话设置块为零?

class A
  def foo
    if block_given?
      result = yield 
      # do stuff with the yield result
    end
    # some more code
  end
end

class B < A
  def foo
    block_result = yield
    # process block results and store it
    # ...
    super
  end
end

B.new.foo { puts "block called" }
# => block called
# => block called
Run Code Online (Sandbox Code Playgroud)

我不想两次屈服.是否有可能block_given?在类中A 返回false?

背景是我不拥有A该类,我不能改变它的foo方法,但我想避免两次调用我的块.我也不想通过虚拟/空块超,因为行为Afoo时候给出一个块的方法改变.

ruby

7
推荐指数
1
解决办法
812
查看次数

在 rspec 自定义匹配器中重用失败消息

我有一个自定义匹配器,在其匹配块中使用期望(此处的代码已简化)

RSpec::Matchers.define :have_foo_content do |expected|
  match do |actual|
    expect(actual).to contain_exactly(expected)
    expect(actual.foo).to contain_exactly(expected.foo)
  end
end
Run Code Online (Sandbox Code Playgroud)

通常错误消息看起来像这样

       expected collection contained:  ["VLPpzkjahD"]
       actual collection contained:    ["yBzPmoRnSK"]
       the missing elements were:      ["VLPpzkjahD"]
       the extra elements were:        ["yBzPmoRnSK"]
Run Code Online (Sandbox Code Playgroud)

但是当使用自定义匹配器时,它只打印此内容,并且重要的调试信息会丢失:

expected MyObject to have_foo_content "foobar"
Run Code Online (Sandbox Code Playgroud)

那么,是否可以重新使用匹配块中的错误消息作为失败消息?我知道我可以提供自定义失败消息

failure_message do |actual|
  # ...
end
Run Code Online (Sandbox Code Playgroud)

但我不知道如何访问上述错误引发的失败消息。

ruby rspec

7
推荐指数
1
解决办法
884
查看次数

替换数组内容的简短方法

有没有方便的方法来替换数组的内容,并保持对它的引用?我不想像这样替换数组:

var arr1 = [1,2,3];
var referenceToArr1 = arr1;
var arr2 = [4,5,6];

arr1 = arr2;
// logs: [4,5,6] false
console.log(arr1, arr1===referenceToArr1);
// logs [1,2,3]
console.log(referenceToArr1);
Run Code Online (Sandbox Code Playgroud)

这种方式arr1有内容arr2,但我放松了参考referenceToArr1,因为它仍然指向原文 arr1.

通过这种方式,我没有放弃参考:

var arr1 = [1,2,3];
var referenceToArr1 = arr1;
var arr2 = [4,5,6];

arr1.length = 0;
for (var i = 0; i < arr2.length; i++) {
  arr1.push(arr2[i]);
}
// logs: [4,5,6] true
console.log(arr1, arr1===referenceToArr1);
// logs: [4,5,6]
console.log(referenceToArr1)
Run Code Online (Sandbox Code Playgroud)

这里的缺点是,我必须清空arr1.length = 0,迭代每个元素arr2 …

javascript arrays underscore.js angularjs

6
推荐指数
2
解决办法
3225
查看次数

Grape:从无效的JSON中拯救

第一:

我正在使用grape来构建我的API(Rails 4).当有人发送无效的JSON正文(例如忘记了最后一个})时,会出现以下错误:

ActionDispatch::ParamsParser::ParseError (795: unexpected token at '{"foobar": 1234

')
Run Code Online (Sandbox Code Playgroud)

我尝试用葡萄rescue_from :all选项,但这不起作用.在堆栈跟踪中,我看不到涉及的葡萄宝石.似乎这个错误是从actionpack抛出的:

  .gems/gems/actionpack-4.1.4/lib/action_dispatch/middleware/params_parser.rb:53:in `rescue in parse_formatted_parameters'
  .gems/gems/actionpack-4.1.4/lib/action_dispatch/middleware/params_parser.rb:32:in `parse_formatted_parameters'
  .gems/gems/actionpack-4.1.4/lib/action_dispatch/middleware/params_parser.rb:23:in `call'
Run Code Online (Sandbox Code Playgroud)

但是,捕获这些错误,返回400: Bad Request错误以及unexpected token at '{"foobar": 1234在json响应中包含消息的最佳方法是什么?

第二:

我尝试用RSpec测试这个,但是在发送带有无效JSON的原始请求时没有任何运气.我试过了

post "/my_route", '{some invalid json'
Run Code Online (Sandbox Code Playgroud)

但这不会从上面抛出错误.我认为自Rails 4以来,作为字符串传递的第二个参数被视为原始体?

ruby json rspec ruby-on-rails ruby-grape

6
推荐指数
1
解决办法
1071
查看次数