小编Ant*_*ony的帖子

选项卡完成仅冻结Git命令

我的设置有一些奇怪的行为,我似乎无法缩小范围.

我在我的shell中使用tab完成没有任何问题(我的shell是zsh).我遇到的问题是在发出git命令后关于标签完成.

示例1(工作正常):

我创建了一个新目录,并将其更改为git init.然后我touch hello.rb.如果我这样做git add <tab>会将其更改为git add hello.rb.

示例2(不起作用):

我在一个真的不是很大的rails应用程序中,如果我试图以git add G<tab>它将拉动我的意图运行Gemfile,它只是挂起并挂起,直到我用ctrl-c哪个输出杀死它:

Killed by signal in __git_complete_index_file after 159s
Run Code Online (Sandbox Code Playgroud)

在zsh我正在使用:

# completion
autoload -U compinit
compinit
Run Code Online (Sandbox Code Playgroud)

其他人遇到过这个问题吗?我可以解决它,但我必须做错事,我不确定在哪里看.

事物的版本:

git version 2.1.2
zsh 5.0.7
iTerm2 Build 2.0.0.20141103
Run Code Online (Sandbox Code Playgroud)

更新:

Git v 2.2.0修复了这个问题,所以只要你遇到这个问题就升级.

git shell zsh tab-completion iterm2

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

运行'__rvm_make install'时出错

我是编程尝试使用RVM添加Ruby 2.2并接收以下错误的新手.我已经运行rvm get stable并尝试重新安装,但得到了同样的错误.

$ rvm reinstall ruby-2.2.0
Searching for binary rubies, this might take some time.
No binary rubies available for: osx/10.10/x86_64/ruby-2.2.0.
Continuing with compilation. Please read 'rvm help mount' to get more information on binary rubies.
Checking requirements for osx.
Installing requirements for osx.
Updating system.....
Installing required packages: autoconf, automake, libtool, pkg-config, libyaml, readline, libksba, openssl........
Certificates in '/usr/local/etc/openssl/cert.pem' are already up to date.
Requirements installation successful.
Installing Ruby from source to: /usr/local/rvm/rubies/ruby-2.2.0, this may take a …
Run Code Online (Sandbox Code Playgroud)

ruby macos rvm

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

Rorn中的Unicorn&Pry

因为我在一段时间后从我的提示中被启动,所以我无法使用Unicorn的pry.这是一个快速概述:

在控制器中的自定义操作中,我有:

  def assign
    binding.pry
  end
Run Code Online (Sandbox Code Playgroud)

走这条路是没问题的,我甚至得到了熟悉的pry提示:

     8: def assign
     9:
 => 10:   binding.pry
    11: end

[1] pry(#<RolesController>)>
Run Code Online (Sandbox Code Playgroud)

经过大约一分钟的时间后,我得到了这个让我从撬动提示中解脱出来:

[3] pry(#<RolesController>)> E, [2014-08-21T16:29:01.698472 #4780] ERROR -- : worker=0 PID:4852 timeout (61s > 60s), killing
E, [2014-08-21T16:29:01.721420 #4780] ERROR -- : reaped #<Process::Status: pid 4852 SIGKILL (signal 9)> worker=0
I, [2014-08-21T16:29:01.745491 #5109]  INFO -- : worker=0 ready
Run Code Online (Sandbox Code Playgroud)

有没有办法在撬时不杀死进程?

ruby ruby-on-rails unicorn pry

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

将Heroku环境变量传输到Docker实例

我在Heroku上构建了一个RoR应用程序,该应用程序必须在Docker容器中运行。为此,我使用了官方的Dockerfile。由于Heroku非常常见,因此我需要一些附加组件才能使该应用程序完全运行。在生产中,该变量DATABASE_URL在我的应用程序中可用。但是,如果我尝试使用环境变量的其他附加组件(在我的情况下为Mailtrap),则在运行时不会将变量复制到实例中。

所以我的问题很简单:在Heroku上执行时,如何使Docker实例知道环境变量?

您可能会问,我已经知道我们可以在中指定环境指令docker-compose.yml。我想避免这种情况,以便能够通过项目存储库共享此文件。

ruby ruby-on-rails heroku environment-variables docker

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

在Ruby中实现to_int和to_str的后果

有一个类,它暴露了一个字符串值和一个int值(分别是一个命令输出和退出代码).除了通过to_s和暴露它们之外to_i,我也在使用,to_str并且to_int像这样:

class Status
  def to_s
    @output
  end
  alias :to_str :to_s

  def to_i
    @status.exitstatus
  end
  alias :to_int :to_i
end
Run Code Online (Sandbox Code Playgroud)

我的想法是能够在尽可能多的情况下使用此对象.将它强制转换为字符串或int会增加可用性.例如,我可以用字符串连接对象:

a_string = "Output was: " + results
Run Code Online (Sandbox Code Playgroud)

(我想用这个作为int强制的例子,但Fixnum.+不喜欢它,所以它实际上不起作用:)

an_int = 1 + results
Run Code Online (Sandbox Code Playgroud)

到目前为止,我所读过的所有内容都表示,这可能是一件"糟糕"的事情.常见的主题是这样的:" 当to_s/ to_i您的对象可以表示为字符串/ int时,to_str//to_int仅当您的对象基本上是字符串/ int时".

毫无疑问,我的课程不是"基本上"字符串或整数.但是我对这个规则有一些问题:

  1. 它使我的课程不那么灵活/可用.例如:如果我没有Status.to_str,我无法使用String.+将Status输出与另一个字符串连接起来.
  2. 这似乎违反了鸭子打字的精神.对象的用户(即:将其作为参数获取的方法)不应该关心该对象什么,它应该只关心它能做什么.(在这种情况下,"do"表示"可以表示为字符串/ int".)
  3. "基本上是一个字符串/ int"的参数对我来说非常模糊.例如,你会看到Float.to_int很多提到的.故事说,由于浮点数始终具有整数分量,因此to_int是一种有效的方法.但是,我认为这是虚假的:浮点数不是整数(因为它有一个非整数组件),所以试图将它们的"类型"等同起来并没有多大意义.你可以合法地 Float 转换为整数(通过截断),但我可以说我也可以我的状态转换为整数(通过"截断"所有非退出代码信息). …

ruby duck-typing

5
推荐指数
2
解决办法
577
查看次数

Cron作业使用Whenever VM,Docker和Dokku

我在Ubuntu 14.04上的Docker容器中有一个Ruby on Rails应用程序.我使用Dokku设置部署,但我不确定如何让我的cron作业正常工作.

目前我正在使用every gem,它允许我做一些简单的事情:

every 5.minutes do
  runner 'MyModel.run_something'
end
Run Code Online (Sandbox Code Playgroud)

问题是我认为每次使用git push dokku master它部署时都会重置容器并将其设置回默认设置,从而删除所有我的cron时间表.

所以我想也许cron调度需要在容器外部而在VM级别.

无论我做什么,我目前都没有看到任何cron工作正在运行.这是当我crontab -l在ssh'd 时运行时发生的事情:

root@dashboard:~# crontab -l
no crontab for root
Run Code Online (Sandbox Code Playgroud)

我对容器虚拟化很陌生,所以如果我跳过了关键部分,我很抱歉,但我很难过.

cron ruby-on-rails whenever docker dokku

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

在命名空间之外执行任务

我有一个rake文件设置如下:

require 'rake'

namespace :setup do
  puts "I'm in setup"
  task :create do
    puts "I'm in create"
  end
end

task :run do
  puts "I'm in run"
end
Run Code Online (Sandbox Code Playgroud)

如果我跑,rake setup:create我得到预期的:

I'm in setup
I'm in create
Run Code Online (Sandbox Code Playgroud)

但是,如果我跑,rake run我得到:

I'm in setup
I'm in run
Run Code Online (Sandbox Code Playgroud)

从我在指南中可以看出,这是出乎意料的,如下所述:

查找任务名称时,rake将从当前命名空间开始,并尝试在那里找到该名称.如果它无法在当前命名空间中找到名称,它将搜索父命名空间,直到找到匹配项(如果没有匹配项则发生错误).

不会假设rake从当前命名空间开始,然后继续寻找某些东西.在我的例子中,我没有提供当前的名称,但它跳进去setup,尽管我给的是它run.

我错过了什么?

ruby rake ruby-on-rails rakefile

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

从mgo查询中获取ObjectIdHex值

我还是新手,虽然我在SO上看到了类似的多个问题,但是我无法重现一些OP所要求的输出(这个答案看起来最接近).

我正在做一些相当简单的事情,我正在使用usersmongo收集一个集合,而我想做的就是将_id值作为字符串返回.我最终会把这些推_id到NSQ,但这是我的首要任务.

var users []bson.M
err = sess.DB("db_name").C("users").Find(bson.M{}).All(&users)

if err != nil {
    os.Exit(1)
}

for _, user := range users {
    fmt.Printf("%+v \n", user["_id"])
}
Run Code Online (Sandbox Code Playgroud)

今天这个输出:

ObjectIdHex("537f700b537461b70c5f0000")
ObjectIdHex("537f700b537461b70c600000")
ObjectIdHex("537f700b537461b70c610000")
ObjectIdHex("537f700b537461b70c620000")
Run Code Online (Sandbox Code Playgroud)

我浏览了bson #m docs,并认为我正确使用地图以增加价值.所以我认为,我的查询结果如下:

{"_id" : ObjectIdHex("Some_ID") }
Run Code Online (Sandbox Code Playgroud)

但是如果ObjectIdHex("ID")是值,我如何简单地在其中获取字符串.

如此理想的输出:

"537f700b537461b70c5f0000"
"537f700b537461b70c600000"
"537f700b537461b70c610000"
"537f700b537461b70c620000"
Run Code Online (Sandbox Code Playgroud)

go mongodb mgo

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

Nokogiri Ruby - 从输出 html 中删除 &lt;!DOCTYPE ... &gt;

我正在使用 nokogiri 解析一个 html 文件并对其进行修改,然后将其输出到这样的文件中:

htext= File.open(inputOpts.html_file).read
h_doc = Nokogiri::HTML(htext)
File.open(outputfile, 'w+')  do |file|
  file.write(h_doc)
end
Run Code Online (Sandbox Code Playgroud)

输出文件包含第一行:

 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
Run Code Online (Sandbox Code Playgroud)

我不想要这个,因为我将 html 嵌入到不同的文件中,而这个标签导致了问题。

问题是如何从 h_doc 中删除它。

ruby nokogiri

3
推荐指数
2
解决办法
1532
查看次数

Ruby 模板 if else 语句

<% @players.each do |player| %>
    <% if rad_win == true %>
    <%  @mywin = "Radiant Win" %>
    <%  puts "1111111" %>
    <% elsif rad_win == false %>
    <%  @mywin = "Radiant Loss" %>
    <%  puts "222222" %>
    <% else %>
    <%   @mywin = "Loss" %>
    <% end %>
<% end %>
Run Code Online (Sandbox Code Playgroud)

在我的 test.html.erb 中,我有以下代码。我可以看到 rad_win 为 false,但该代码块未执行。即没有22222222

ruby templates if-statement

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

YARD用于具有默认哈希的关键字参数

我有一个看起来像这样的方法:

def get_endpoint(params: {})
end
Run Code Online (Sandbox Code Playgroud)

我希望此方法的调用者能够传递一些可选参数.

我想写YARD文档来支持这个,如果我没有使用关键字参数,我会使用@option 声明.

但是,YARD自己的文档说:

注意:对于关键字参数,请使用@param,而不是@option.

所以我尝试过:

  # @param params [Hash] options to be used in request
  # @param date [String] date in YYYYMMDD
  # @param start_time [Integer] start_time in Epoch
Run Code Online (Sandbox Code Playgroud)

这失败了,因为YARD只看到params我正在使用的关键字参数.确切的失败是:

@param tag has unknown parameter name: date
Run Code Online (Sandbox Code Playgroud)

那么我尝试使用@option替换为param关键字的语法:

  # @param params [Hash] options to be used in request
  # @param params [String] :date in YYYYMMDD
  # @param params [Integer] :start_time in Epoch
Run Code Online (Sandbox Code Playgroud)

这会导致不同的错误:

@param tag has duplicate …
Run Code Online (Sandbox Code Playgroud)

ruby yard yardoc

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

在 Javascript 中按对象 ID 分组

我有一系列 ID 和组织,如下所示:

var ids = ['1','2', '3'];
var orgs =
    [ 
      { name: "Org 1", id: 1 },
      { name: "Org 2", id: 2 },
      { name: "Org 3", id: 2 }
    ]
Run Code Online (Sandbox Code Playgroud)

我想遍历这些以输出如下内容:

{
    1: [
        {name: "Org 1", id: 1}
    ],
    2: [
        {name: "Org 2", id: 2},
        {name: "Org 3", id: 2}
    ]
}
Run Code Online (Sandbox Code Playgroud)

我试过这个没有成功:

var results = orgs.forEach(function (org) {
    if (results[org.id]) {
        results.push(org)
    } else {
        results[org.id] = [org]
    };
});
Run Code Online (Sandbox Code Playgroud)

javascript arrays

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