我在Git-worktree上阅读了Github的帖子.他们写:
假设您正在一个名为的分支上的Git存储库中工作
feature,当用户报告高紧急性错误时master.首先,您创建一个带有新分支的链接工作树,hotfix相对于主分析签出[...]您可以修复错误,推送修补程序,并创建拉取请求.
当我在一个名为feature的分支上工作并报告master中的一些高紧急性bug时,我通常会隐藏我正在处理的任何内容并创建一个新的分支.当我完成后,我可以继续工作.这是一个非常简单的模型,我多年来一直这样做.
另一方面,使用git-worktree有其自身的局限性:
例如,不允许同时在两个链接的工作树中检出相同的分支,因为这将允许在一个工作树中提交的更改使另一个工作树不同步.
为什么我会为已经解决的问题选择更复杂的工作流程?
是否有任何关于git-worktree事先无法完成的事情,这证明了这一全新的复杂功能?
随着Observers正式从Rails 4.0中删除,我很好奇其他开发人员在他们的位置使用了什么.(除了使用提取的宝石.)虽然Observers肯定被滥用并且有时很容易变得笨拙,但是在缓存清除之外有许多用例,它们是有益的.
例如,需要跟踪模型更改的应用程序.观察者可以轻松地观察模型A的变化,并在数据库中记录模型B的变化.如果你想观察几个模型的变化,那么一个观察者就可以处理它.
在Rails 4中,我很好奇其他开发人员使用什么策略代替Observers来重新创建该功能.
就个人而言,我倾向于某种"胖控制器"实现,在每个模型控制器的创建/更新/删除方法中跟踪这些更改.虽然它稍微膨胀了每个控制器的行为,但它确实有助于可读性和理解,因为所有代码都在一个地方.缺点是现在的代码非常相似,分散在几个控制器中.将该代码提取到帮助器方法是一种选择,但您仍然可以调用遍布各处的方法.不是世界末日,也不是"精瘦控制者"的精神.
ActiveRecord回调是另一种可能的选择,虽然我个人并不喜欢,因为在我看来它往往会将两个不同的模型紧密地结合在一起.
所以在Rails 4中,no-Observers世界,如果你必须在创建/更新/销毁另一条记录之后创建一条新记录,你会使用什么样的设计模式?胖控制器,ActiveRecord回调,还是完全不同的东西?
谢谢.
我正在编写一个处理来自文本区域的用户输入的模型.根据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
不用说,这不起作用.当我尝试保存新帖子时出现以下错误.
undefined method `white_list_sanitizer' for #<Class:0xdeadbeef>
显然,SanitizeHelper创建了一个HTML :: WhiteListSanitizer的实例,但是当我将它混合到我的模型中时,它找不到HTML :: WhiteListSanitizer.为什么?我该怎么做才能解决这个问题?
如何以编程方式将类名FooBar转换为符号:foo_bar?像这样的东西,但是正确处理骆驼的情况?
FooBar.to_s.downcase.to_sym
我开始使用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);
}
我在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
我期待那里有另一条线:
2015-02-11 07:38:06 …当我的规格出现错误时,我收到如下消息:
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'
我正在运行Ruby 1.0.2,rails(3.0.3)和rspec(2.3.0).M .rspec配置文件只指定了两个选项:
--drb --colour
如何关闭扩展跟踪?
我们有一个遗留代码库,其中rubocop报告了一些我永远无法解决的错误:
不要扩展由初始化的实例
Struct.new.扩展它会引入多余的类级别,如果文件需要多次,也可能会引入奇怪的错误.
究竟什么意思是"多余的阶级"以及可能引入什么样的"奇怪错误"?
(问,因为很明显我们在过去几年里没有任何这样的问题.)
机架指定
Rack应用程序是响应调用的Ruby对象(不是类).
因此,一个简单的config.ru看起来像这样:
class MyApp
  def call(env)
    [200, {"Content-Type" => "text/plain"}, ["Hello from Rack!\n"]]
  end
end
run MyApp.new
而Rails生成这个:
# This file is used by Rack-based servers to start the application.
require ::File.expand_path('../config/environment',  __FILE__)
run RailsApp::Application
所以,我想知道:为什么不在run RailsApp::Application.newRack指定它是一个对象而不是一个类?Rails::Application我缺少什么特别的东西?
我在我的Gemfile之外运行刹车手,所以我没有使用捆绑器.
如果我这样做gem list,我可以看到我有以下制动员
brakeman (3.3.3, 3.3.2, 3.1.4, 3.1.2)
但如果我这样做brakeman --version,我明白了
brakeman 3.1.2
所以我没有使用最新版本.如果我这样做gem update brakeman或
gem update brakeman, '3.3.3,
我明白了
Updating installed gems
Nothing to update
那么如何运行brakeman版本3.3.3?
我们有三个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
ruby ×4
activerecord ×1
amazon-ec2 ×1
amazon-elb ×1
aws-lambda ×1
backtrace ×1
brakeman ×1
git ×1
git-worktree ×1
httprequest ×1
metrics ×1
model ×1
node.js ×1
rack ×1
rspec ×1
rubocop ×1
rubygems ×1