我在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
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.为什么?我该怎么做才能解决这个问题?
如何以编程方式将类名FooBar转换为符号:foo_bar?像这样的东西,但是正确处理骆驼的情况?
FooBar.to_s.downcase.to_sym
Run Code Online (Sandbox Code Playgroud) 我开始使用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) 当我的规格出现错误时,我收到如下消息:
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
如何关闭扩展跟踪?
我们有一个遗留代码库,其中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
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我缺少什么特别的东西?
我在我的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?
我们有三个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