小编awe*_*ndt的帖子

我将使用git-worktree做什么?

在Git-worktree上阅读了Github的帖子.他们写:

假设您正在一个名为的分支上的Git存储库中工作feature,当用户报告高紧急性错误时master.首先,您创建一个带有新分支的链接工作树,hotfix相对于主分析签出[...]您可以修复错误,推送修补程序,并创建拉取请求.

当我在一个名为feature的分支上工作并报告master中的一些高紧急性bug时,我通常会隐藏我正在处理的任何内容并创建一个新的分支.当我完成后,我可以继续工作.这是一个非常简单的模型,我多年来一直这样做.

另一方面,使用git-worktree有其自身的局限性:

例如,不允许同时在两个链接的工作树中检出相同的分支,因为这将允许在一个工作树中提交的更改使另一个工作树不同步.

为什么我会为已经解决的问题选择更复杂的工作流程?

是否有任何关于git-worktree事先无法完成的事情,这证明了这一全新的复杂功能?

git git-worktree

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

适用于4.0的Rails Observer替代品

随着Observers正式从Rails 4.0中删除,我很好奇其他开发人员在他们的位置使用了什么.(除了使用提取的宝石.)虽然Observers肯定被滥用并且有时很容易变得笨拙,但是在缓存清除之外有许多用例,它们是有益的.

例如,需要跟踪模型更改的应用程序.观察者可以轻松地观察模型A的变化,并在数据库中记录模型B的变化.如果你想观察几个模型的变化,那么一个观察者就可以处理它.

在Rails 4中,我很好奇其他开发人员使用什么策略代替Observers来重新创建该功能.

就个人而言,我倾向于某种"胖控制器"实现,在每个模型控制器的创建/更新/删除方法中跟踪这些更改.虽然它稍微膨胀了每个控制器的行为,但它确实有助于可读性和理解,因为所有代码都在一个地方.缺点是现在的代码非常相似,分散在几个控制器中.将该代码提取到帮助器方法是一种选择,但您仍然可以调用遍布各处的方法.不是世界末日,也不是"精瘦控制者"的精神.

ActiveRecord回调是另一种可能的选择,虽然我个人并不喜欢,因为在我看来它往往会将两个不同的模型紧密地结合在一起.

所以在Rails 4中,no-Observers世界,如果你必须在创建/更新/销毁另一条记录之后创建一条新记录,你会使用什么样的设计模式?胖控制器,ActiveRecord回调,还是完全不同的东西?

谢谢.

ruby-on-rails ruby-on-rails-4

149
推荐指数
6
解决办法
3万
查看次数

在模型中使用帮助器:如何包含辅助依赖项?

我正在编写一个处理来自文本区域的用户输入的模型.根据http://blog.caboo.se/articles/2008/8/25/sanitize-your-users-html-input的建议,我在使用before_validate保存到数据库之前清理模型中的输入打回来.

我模型的相关部分如下所示:

include ActionView::Helpers::SanitizeHelper

class Post < ActiveRecord::Base {
  before_validation :clean_input

  ...

  protected

  def clean_input
    self.input = sanitize(self.input, :tags => %w(b i u))
  end
end
Run Code Online (Sandbox Code Playgroud)

不用说,这不起作用.当我尝试保存新帖子时出现以下错误.

undefined method `white_list_sanitizer' for #<Class:0xdeadbeef>
Run Code Online (Sandbox Code Playgroud)

显然,SanitizeHelper创建了一个HTML :: WhiteListSanitizer的实例,但是当我将它混合到我的模型中时,它找不到HTML :: WhiteListSanitizer.为什么?我该怎么做才能解决这个问题?

ruby activerecord model ruby-on-rails

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

如何将Ruby类名转换为下划线符号?

如何以编程方式将类名FooBar转换为符号:foo_bar?像这样的东西,但是正确处理骆驼的情况?

FooBar.to_s.downcase.to_sym
Run Code Online (Sandbox Code Playgroud)

ruby metaprogramming ruby-on-rails

90
推荐指数
3
解决办法
4万
查看次数

为什么此HTTP请求无法在AWS Lambda上运行?

我开始使用AWS Lambda,我正在尝试从我的处理程序函数请求外部服务.根据这个答案,HTTP请求应该可以正常工作,我没有找到任何其他说明的文档.(事实上​​,人们已经发布了使用Twilio API发送短信的代码.)

我的处理程序代码是:

var http = require('http');

exports.handler = function(event, context) {
  console.log('start request to ' + event.url)
  http.get(event.url, function(res) {
    console.log("Got response: " + res.statusCode);
  }).on('error', function(e) {
    console.log("Got error: " + e.message);
  });

  console.log('end request to ' + event.url)
  context.done(null);
}
Run Code Online (Sandbox Code Playgroud)

我在CloudWatch日志中看到以下4行:

2015-02-11 07:38:06 UTC START RequestId: eb19c89d-b1c0-11e4-bceb-d310b88d37e2
2015-02-11 07:38:06 UTC eb19c89d-b1c0-11e4-bceb-d310b88d37e2 start request to http://www.google.com
2015-02-11 07:38:06 UTC eb19c89d-b1c0-11e4-bceb-d310b88d37e2 end request to http://www.google.com
2015-02-11 07:38:06 UTC END RequestId: eb19c89d-b1c0-11e4-bceb-d310b88d37e2
Run Code Online (Sandbox Code Playgroud)

我期待那里有另一条线:

2015-02-11 07:38:06 …
Run Code Online (Sandbox Code Playgroud)

httprequest amazon-web-services node.js aws-lambda

74
推荐指数
7
解决办法
10万
查看次数

如何在RSpec 2中缩短测试失败的回溯?

当我的规格出现错误时,我收到如下消息:

Vendor should reject duplicate names
     Failure/Error: user_with_duplicate_email.should_not be_valid
     expected valid? to return false, got true
     # /home/kevin/.rvm/gems/ruby-1.9.2-p136@rails3tutorial/gems/rspec-expectations-2.3.0/lib/rspec/expectations/fail_with.rb:29:in `fail_with'
     # /home/kevin/.rvm/gems/ruby-1.9.2-p136@rails3tutorial/gems/rspec-expectations-2.3.0/lib/rspec/expectations/handler.rb:44:in `handle_matcher'
     # /home/kevin/.rvm/gems/ruby-1.9.2-p136@rails3tutorial/gems/rspec-expectations-2.3.0/lib/rspec/expectations/extensions/kernel.rb:50:in `should_not'
.
.
about 15 more lines
.
.
     # /home/kevin/.rvm/rubies/ruby-1.9.2-p136/lib/ruby/1.9.1/drb/drb.rb:1592:in `block (2 levels) in main_loop'
     # /home/kevin/.rvm/rubies/ruby-1.9.2-p136/lib/ruby/1.9.1/drb/drb.rb:1588:in `loop'
     # /home/kevin/.rvm/rubies/ruby-1.9.2-p136/lib/ruby/1.9.1/drb/drb.rb:1588:in `block in main_loop'
Run Code Online (Sandbox Code Playgroud)

我正在运行Ruby 1.0.2,rails(3.0.3)和rspec(2.3.0).M .rspec配置文件只指定了两个选项:

--drb --colour

如何关闭扩展跟踪?

rspec backtrace

18
推荐指数
1
解决办法
1473
查看次数

为什么我不应该扩展Struct.new初始化的实例?

我们有一个遗留代码库,其中rubocop报告了一些我永远无法解决的错误:

不要扩展由初始化的实例Struct.new.扩展它会引入多余的类级别,如果文件需要多次,也可能会引入奇怪的错误.

究竟什么意思是"多余的阶级"以及可能引入什么样的"奇怪错误"?

(问,因为很明显我们在过去几年里没有任何这样的问题.)

ruby rubocop

15
推荐指数
2
解决办法
897
查看次数

为什么Rails生成一个运行类而不是对象的config.ru?

机架指定

Rack应用程序是响应调用的Ruby对象(不是类).

因此,一个简单的config.ru看起来像这样:

class MyApp
  def call(env)
    [200, {"Content-Type" => "text/plain"}, ["Hello from Rack!\n"]]
  end
end

run MyApp.new
Run Code Online (Sandbox Code Playgroud)

而Rails生成这个:

# This file is used by Rack-based servers to start the application.

require ::File.expand_path('../config/environment',  __FILE__)
run RailsApp::Application
Run Code Online (Sandbox Code Playgroud)

所以,我想知道:为什么不在run RailsApp::Application.newRack指定它是一个对象而不是一个类?Rails::Application我缺少什么特别的东西?

ruby rack ruby-on-rails

11
推荐指数
1
解决办法
3177
查看次数

如何运行特定版本的ruby gem

我在我的Gemfile之外运行刹车手,所以我没有使用捆绑器.

如果我这样做gem list,我可以看到我有以下制动员

brakeman (3.3.3, 3.3.2, 3.1.4, 3.1.2)
Run Code Online (Sandbox Code Playgroud)

但如果我这样做brakeman --version,我明白了

brakeman 3.1.2
Run Code Online (Sandbox Code Playgroud)

所以我没有使用最新版本.如果我这样做gem update brakeman

gem update brakeman, '3.3.3,
Run Code Online (Sandbox Code Playgroud)

我明白了

Updating installed gems
Nothing to update
Run Code Online (Sandbox Code Playgroud)

那么如何运行brakeman版本3.3.3?

rubygems ruby-on-rails brakeman

11
推荐指数
2
解决办法
7663
查看次数

如何在CloudWatch中使用ELB的HealthyHostCount进行监控?

我们有三个EC2实例 - 在eu-west-1区域的每个可用区(AZ)中有一个.它们使用ELB进行负载平衡.我们想要使用CloudWatch监控在负载均衡器上注册的实例数量.问题是:我真的不了解HealthyHostCount指标.

对于部署,我们希望能够在不通知的情况下取消注册单个实例(从LB中取出).因此警报将是:通知负载均衡器后面是否只有1个健康实例持续5分钟.

据我所知,HealthyHostCount(HHC)是在给定的ELB中注册的健康实例的数量,在所有AZ上平均.如果一切正常,HHC应该是1(无论在什么时间段内),因为每个AZ中有1个实例.

几天前,有人在没有重新注册实例的情况下部署,因此只有一个实例是平衡的.当我们注意到这一点时,我们创建了一个警报,当5分钟后平均HHC低于0.6时,通知我们.(如果在ELB中只注册了1个实例,则HHC在任何时间段内应平均为0.33.)但是,警报从未更改为"ALARM"状态.

当我在CloudWatch中检查HHC时,HHC是没有意义的数字(5分钟间隔的总和为现在我记得的全部).

这对我来说都是一团糟.每当我认为我理解该指标时,CloudWatch图表对我来说都是胡言乱语.

有人可以解释如何只注册一个实例时如何使用HHC来发出警报?平均HHC是走的路还是我应该使用其他指标?

metrics amazon-ec2 amazon-web-services amazon-elb amazon-cloudwatch

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