小编PJS*_*and的帖子

没有Rails的Sidekiq不会加载工作类

我正在使用没有Rails的 Sidekiq 3.1.2 ,如下所示:

$ sidekiq -vr sidekiq.rb
Run Code Online (Sandbox Code Playgroud)

sidekiq.rb看起来像这样:

($LOAD_PATH << '.' << 'lib' << 'lib/workers').uniq!
require 'lookup_worker'
Run Code Online (Sandbox Code Playgroud)

lib/workers/lookup_worker.rb看起来像这样:

require 'sidekiq'

class LookupWorker
  include Sidekiq::Worker

  def perform(*args)
    puts "LookupWorker#perform fired with arguments #{args.map(&:inspect).join(', ')}"
  end
end
Run Code Online (Sandbox Code Playgroud)

但是,当我在irb并尝试

> LookupWorker.perform_async('asdf')
Run Code Online (Sandbox Code Playgroud)

它给了我这个:

WARN: {"retry"=>true, "queue"=>"default", "class"=>"LookupWorker", "args"=>["asdf"], "jid"=>"8c278868c5f05ec9beb1dbae", "enqueued_at"=>1402457226.9612548}
WARN: uninitialized constant LookupWorker
WARN: [backtrace, none of it from my code]
ERROR: Sidekiq::Processor crashed!
NameError: uninitialized constant LookupWorker
Run Code Online (Sandbox Code Playgroud)

我错过了什么?

ruby sidekiq

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

否定ActiveRecord查询范围

我的模型范围略微复杂

class Contact < ActiveRecord::Base
  scope :active,       -> { where(inactive: false) }
  scope :groups,       -> { where(contact_type: 2308) }
  scope :group_search, -> (query) do
    active.groups.where("last_name LIKE '%' + ? + '%'", query)
  end
end
Run Code Online (Sandbox Code Playgroud)

出于测试目的,我想确保所有Contacts 返回的内容group_search都被排除在正确的原因之外.

但要获得该列表,我必须加载

Contact.all - Contact.group_search('query')
Run Code Online (Sandbox Code Playgroud)

它运行两个查询,返回一个Array而不是一个Relation,并且比我想要的慢.

而且由于我正在测试group_search范围,因此编写另一个负面的范围会破坏这一点.我宁愿做一些像:

Contact.merge.not(Contact.group_search('query'))
Run Code Online (Sandbox Code Playgroud)

生成以下SQL查询:

SELECT * 
FROM contacts 
WHERE NOT (contact_type = 2308 AND inactive = 0 AND last_name LIKE '%' + ? + '%')
Run Code Online (Sandbox Code Playgroud)

有没有办法做到这一点?

activerecord ruby-on-rails ruby-on-rails-4 rails-activerecord ruby-on-rails-4.1

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

如何设置全局RSpec元数据?

我有一个脚本包含RSpec 3.4.4中的测试并导致它们在十秒后超时.

TIMEOUT = 10

RSpec.configure do | config |
  config.around do |example|
    timeout = Float(example.metadata[:timeout]) rescue TIMEOUT
    begin
      Timeout.timeout(timeout) { example.run }
    rescue Timeout::Error
      skip "Timed out after #{timeout} seconds"
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

这个脚本是在一个中心位置- ~/lib/spec_helper.rb-并require用D spec_helper在我的仓库.

我希望能够example.metadata[:timeout]在整个存储库级别进行配置,使其所有规范在两秒后超时(例如),或者(对于另一个示例)完全没有.

我已经尝试将它设置为一个选项.rspec- 一个对我来说很理想的解决方案 - 但当然它不能识别这样的自定义选项.我希望命令行能做同样的事情.

有没有办法为测试套件中的所有示例设置元数据?

ruby rspec

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

我可以让RSpec只运行更改的规格吗?

我有一个用于大型项目(约3800个单独示例)的测试套件,我将其从RSpec 2.14更新为3.6。

我刚刚为运行了全部替换s/be_true/be true/,但是其中一些应该be_truthy代替,并且这些规格都失败了。

我可以git diff通过一些工作从其中提取更改的行,但是随后我需要将其输入RSpec的行中config.filter_run,这似乎不像我为locations过滤器那样做(当您rspec path/to/file:line在命令行上指定a时激活了该行) ; 它说“ All examples were filtered out; ignoring {:locations=>...}”。

我也可以example.run unless example.location.in? changed_specsaround过滤器中,但这skip是所有其他过滤器,并将它们标记为pending,而不是完全忽略它们。并且它与的其他过滤器不兼容run_all_when_everything_filtered。(可能是因为它example.location指的是测试的第一行,但是更改仅次于该行的几行。)

而且,我似乎也无法使用它在上添加标签example.metadata,然后将其过滤掉。

编辑:我也不想在命令行上指定它们,因为我的测试是在下rerun运行的,它始终运行相同的命令。

还有其他想法吗?

git rspec

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

Bash 将文本回显到 sudo 文件中

我正在尝试将一些文本推送到需要sudo以下内容的文件中:

sudo echo "some text" > /etc/path/to/file
Run Code Online (Sandbox Code Playgroud)

但我不断收到以下错误:

bash: /etc/path/to/file: Permission denied
Run Code Online (Sandbox Code Playgroud)

我可以用 来做nano,但我需要以编程方式来做。是>运营商的问题吗?有我可以使用的脚本吗?

bash sudo file

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

ElasticSearch 1.1.2无法正常启动

我正在为我的公司升级ElasticSearch.首先,我需要在我的机器上运行旧版本(1.1.2),该机器运行OSX Sierra(10.12.6).我elasticsearch@1.1.2已从我公司的存储库下载,但它没有正常启动.我明白了:

$ brew services list
Name                Status  User        Plist
elasticsearch@1.1.2 started pjscopeland /Users/pjscopeland/Library/LaunchAgents/homebrew.mxcl.elasticsearch@1.1.2.plist
Run Code Online (Sandbox Code Playgroud)

...但是Homebrew的状态" started"是黄色的,其余的都是绿色的,如果我手动运行它,我会得到这个:

$ elasticsearch
Java HotSpot(TM) 64-Bit Server VM warning: Option UseParNewGC was deprecated in version 9.0 and will likely be removed in a future release.
Java HotSpot(TM) 64-Bit Server VM warning: Option UseConcMarkSweepGC was deprecated in version 9.0 and will likely be removed in a future release.
Exception in thread "main" java.lang.ExceptionInInitializerError
    at org.elasticsearch.bootstrap.Bootstrap.main(Bootstrap.java:190)
    at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:32)
Caused by: java.lang.UnsupportedOperationException: Boot class path …
Run Code Online (Sandbox Code Playgroud)

homebrew elasticsearch

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