小编Eug*_*ene的帖子

Git为每个分支提交钩子

我正在努力进一步使用git,我认为钩子是我想要的方式,也许有人可以在这里给我一些建议.

我的计划是拥有一个包含3个分支(开发,登台和生产)的git存储库.我希望提交到这3个分支中的每个分支以在提交后触发不同的脚本.

git是否有能力做到这一点,还是我咆哮错误的树?

提前致谢.

git branch post-commit githooks

22
推荐指数
1
解决办法
6901
查看次数

在保存记录之前创建关联

所以,我当然是一个Rails新手,我正在遇到一个相当普遍的问题,但我找不到答案.

我有这样的模型Foo:

class Foo < ActiveRecord::Base
  has_many :bars
end
Run Code Online (Sandbox Code Playgroud)

酒吧belongs_to Foo,一切正常.现在我想创建一个Foo并同时构建Bar.像这样:

f = Foo.new(:baz => 'baz')
bars.each do |b|
  f.bars.build(:bizzy => b[:bizzy])
end
f.save
Run Code Online (Sandbox Code Playgroud)

我知道这不起作用,因为父记录不存在,所以关联不存在,但必须有一种方法来做到这一点.我暂时通过编辑来解决这个问题:

f = Foo.new(:baz => 'baz')
f.save
f = Foo.find(:first, :conditions => {:baz => 'baz'})
bars.each do |b|
  f.bars.create(:bizzy => b[:bizzy])
end
Run Code Online (Sandbox Code Playgroud)

但这并不干净,而且一切都令人不快.

这样做的正确方法是什么?

ruby activerecord ruby-on-rails-3

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

从另一个班级打电话给Sinatra erb

我需要在控制器的类中渲染一个Sinatra erb模板.我有问题这个问题.我查看了Sinatra rdocs并提出了这个问题:

Sinatra::Templates.erb :template_to_render
Run Code Online (Sandbox Code Playgroud)

当我这样做时,我收到以下错误:

undefined method `erb' for Sinatra::Templates:Module
Run Code Online (Sandbox Code Playgroud)

有没有办法从另一个类调用它?

ruby sinatra

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

彩色输出打破了使用readline的换行

我正在使用Ruby中的readline为一些输出着色,但是我没有运气让换行正常工作.例如:

"\e[01;32mThis prompt is green and bold\e[00m > "
Run Code Online (Sandbox Code Playgroud)

期望的结果是:

This prompt is green and bold > aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
Run Code Online (Sandbox Code Playgroud)

我实际得到的是:

aaaaaaaaaaa is green and bold > aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
Run Code Online (Sandbox Code Playgroud)

如果我删除颜色代码,换行工作正常.我知道用bash,如果颜色代码被错误地终止,就会发生这种情况,但我已经尝试了所有我能想到的东西,包括一些不同的宝石,行为是一样的.它也出现在具有不同版本Readline的多个系统上.这种特殊的项目使用rb-readline,而不是到C readline.

ruby readline

7
推荐指数
2
解决办法
2603
查看次数

Ruby OptionParser:隐藏命令选项的帮助文本

Ruby"OptionParser将根据此描述为您自动生成帮助屏幕"[http://ruby.about.com/od/advancedruby/a/optionparser.htm]

有没有办法删除命令选项的帮助文本.我可以使用隐藏命令,而是使用命令选项(切换)并隐藏其帮助上下文.

ruby

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

Rails 5 default_url_options 奇怪之处

我有一个非常简单的 Rails 应用程序,我正在从 Rails 4 升级到 Rails 5,但我注意到一些奇怪的地方 default_url_options

config/environments/test.rb我有:

Rails.application.routes.default_url_options[:host]= ENV["HTTP_HOST"] || "localhost"
Rails.application.routes.default_url_options[:port]= ENV["PORT"] || 3000
Run Code Online (Sandbox Code Playgroud)

我的应用程序有一个名为api. 在我的请求规范中,我看到了这个:

[1] pry> api_v3_sample_url
=> "http://www.example.com:3000/api/v3/sample"
[2] pry> Rails.application.routes.url_helpers.api_v3_sample_url
=> "http://localhost:3000/api/v3/sample"
Run Code Online (Sandbox Code Playgroud)

我错过了什么导致这些 URL 不同?

编辑

根据我设置的这个线程

config.action_controller.default_url_options = {
  host: ENV['HTTP_HOST'] || 'localhost'
}
Run Code Online (Sandbox Code Playgroud)

config/environments/test.rb但现在我得到这样的:

> Rails.application.routes.url_helpers.api_v3_sample_url
ArgumentError: Missing host to link to! Please provide the :host parameter, set default_url_options[:host], or set :only_path to true
> api_v3_sample_url
=> "http://www.example.com/api/v3/sample"
Run Code Online (Sandbox Code Playgroud)

编辑 2

可能值得注意的是,这些是请求规范而不是功能规范(不使用水豚)。

ruby ruby-on-rails

5
推荐指数
1
解决办法
6913
查看次数

File/FileUtils.chmod Ruby的问题

我遇到了Ruby和File.chmod的一个相当奇怪的问题(FileUtils.chmod存在同样的问题.

以下是我为测试用例所做的事情:

File.chmod(1777, "testfile")
Run Code Online (Sandbox Code Playgroud)

但是一旦我这样做了,我就把它作为一个权限集:

--wxrwS--t
Run Code Online (Sandbox Code Playgroud)

仅在使用*nix 4位数限制集时才存在此问题.我用谷歌搜索,但没有得到任何有价值的东西.当权限集为0777时,它会正确分配,但第一个数字的任何高于0的内容都会使权限变得非常糟糕.

有人有任何提示吗?

我知道我可以通过系统调用来做我想做的事情,但我确信这很简单,我很想念.

ruby

4
推荐指数
1
解决办法
1640
查看次数

哈希键作为类中的访问器

我正在开发一个读取一些传感器信息并将其作为哈希值返回的类。我想使用哈希键作为访问器,但我没有太多运气让它工作。到目前为止,这是我的代码的相关部分:

我已经尝试过使用 method_missing 和使用:define_method方法。

  attr_reader :sensor_hash

  def method_missing(name, *args, &blk)
    if args.empty? && blk.nil? && @sensor_hash.has_key?(name.to_s)
      @sensor_hash[name.to_s]
    else
      super
    end
  end

  def sensor(*sensor_to_return)
    sensor_output = run_command(this_method_name)
    sensor_output = sensor_output.split("\n")
    sensor_output.map! { |line| line.downcase! }
    unless sensor_to_return.empty?
      sensor_to_return = sensor_to_return.to_s.downcase
      sensor_output = sensor_output.grep(/^#{sensor_to_return}\s/)
    end
    @sensor_hash = Hash.new
    sensor_output.each { |stat| @sensor_hash[stat.split(/\s+\|\s?/)[0].gsub(' ','_').to_sym] = stat.split(/\s?\|\s?/)[1..-1].each { |v| v.strip! } }
    @sensor_hash.each do |k,v|
      puts v.join("\t")
      self.class.send :define_method, k { v.join("\t") }
    end
    return @sensor_hash
Run Code Online (Sandbox Code Playgroud)

返回的数据是以传感器名称作为键的哈希值,值是返回的所有其他内容的数组。我的目标是能够调用Class.sensor.sensor_name并获取Class.sensor[:sensor_name]. 目前,我所能得到的只是一个未定义的方法错误。有人知道我在这里做错了什么吗?

ruby methods hash accessor

3
推荐指数
1
解决办法
1953
查看次数