我有一个包含Rails ActionController::Live模块的控制器.我显示一个日志文件,正在使用读取的内容FileTail宝石,并使用SSE来自ActionController::Live像这样:
class LogsController < ApplicationController
include ActionController::Live
def live
response.headers['Content-Type'] = 'text/event-stream'
sse = SSE.new(response.stream, event: 'queries')
File.open(logfile_location) do |log|
log.extend(File::Tail)
log.interval = 1
log.backward(10)
log.tail {|line| sse.write line}
end
rescue => e
Rails.logger.info "Error Message:: #{e.message}"
ensure
sse.close
end
end
Run Code Online (Sandbox Code Playgroud)
我想用它来测试live动作Rspec.这就是我目前拥有的:
before { get :live }
it { expect(response.headers['Content-Type']).to eq("text/event-stream") }
after {response.stream.close unless response.stream.closed? }
Run Code Online (Sandbox Code Playgroud)
如果我没有after适当的线路,规范通过,但它只是继续监听,连接永远不会关闭,因此规格永远不会完成,你必须手动杀死它们.
如果我有这after条线,它有时会通过,但大多数时候它会抛出异常,并且规格失败.
fatal:
No live threads left. …Run Code Online (Sandbox Code Playgroud) 有没有办法在类方法中获取我们为特定类创建的实例的名称?
这就是我想要做的:
module MyObjectStore
values = {}
temp= {}
define_method :add_check_attribute do |method,*args|
if method.to_s =~ /=$/
temp[method[0..-2]] = args[0]
else
instance_variable_get("@#{method}")
end
end
define_method :method_missing do |method,*args|
add_check_attribute(method,*args)
end
define_method :save do
temp.each {|key,value| instance_variable_set("@#{key}",value)}
values[self] = temp
end
end
class C
include MyObjectStore
end
a = C.new
a.id = 1
a.name = 'gaurav'
a.save
Run Code Online (Sandbox Code Playgroud)
在模块的倒数第三行,我试图将对象的值存储到以实例名称为键的新哈希中.
有可能吗?
我现在正在使用self它,但它给出了整个对象,而不是实例名称.
我刚刚开始使用Java,正在调查这个Nested Classes主题,并尝试了一些东西,突然间,这发生了:
class Encloser
{
static int i;
static void m1()
{
System.out.println(i);
}
static void m2()
{
Enclosee.accessEncloser();
}
static class Enclosee
{
static void accessEncloser()
{
i = 1;
m1();
}
static void accessEncloserNew()
{
m2();
}
}
}
class EncloserTest
{
public static void main(String[] args)
{
Encloser ee = new Encloser();
Encloser.Enclosee e = new Encloser.Enclosee();
ee.m1();
ee.m2();
e.accessEncloser();
e.accessEncloserNew();Encloser.m1();
Encloser.m2();
Encloser.m1();
Encloser.Enclosee.accessEncloserNew();
Encloser.Enclosee.accessEncloser();
}
}
Run Code Online (Sandbox Code Playgroud)
运行上面的代码不会给出任何错误/异常.它只是运行.这里的困惑是,实例如何能够在Static Methods这里调用?不Static Methods喜欢Class …