我正在不同的操作系统上测试我们的服务器应用程序(编写的Java),并认为由于良好的Java集成,OpenSolaris(2008.11)将是最不麻烦的.事实证明我错了,因为我最终得到了一个UnknownHostException
try {
computerName = InetAddress.getLocalHost().getHostName();
if (computerName.indexOf(".") > -1)
computerName = computerName.substring(0,
computerName.indexOf(".")).toUpperCase();
} catch (UnknownHostException e) {
e.printStackTrace();
}
Run Code Online (Sandbox Code Playgroud)
输出是:
java.net.UnknownHostException: desvearth01: desvearth01
at java.net.InetAddress.getLocalHost(InetAddress.java:1353)
Run Code Online (Sandbox Code Playgroud)
但是,nslookup desvearth01
返回正确的IP地址,并按预期nslookup localhost
返回127.0.0.1
.此外,相同的代码在FreeBSD上完美运行.我不知道OpenSolaris有什么特别之处吗?
任何提示都表示赞赏,谢谢.
我正在编写一个脚本来在Ubuntu构建机器上构建所有项目.
每个项目都存储在Perforce中,我使用p4来执行上述操作.
我使用的命令是:
p4 -u <MyUsername> -P <MyPassword> client MyWorkspace
Run Code Online (Sandbox Code Playgroud)
这运行并加载vim,然后我需要执行:wq [Enter]退出.
我可以自动保存或避免加载vim吗?
如何在Perforce中通过用户abc获取所有签出文件的列表?
另外,如何获取所有已检出文件的列表?
我有一个xml文件,我想显示(渲染)它,因为它是用户,即我想保留标签.我应该怎么做RoR?
我试过了render :file=>"/path/to/file.xml"
,但标签<product>
消失了.
//file.xml
<product>car</product>
Run Code Online (Sandbox Code Playgroud)
更新:我发现该行为依赖于浏览器
Mozilla/5.0(X11; U; Linux i686; en-US; rv:1.9.0.3)Gecko/2008101315 Ubuntu/8.10(强悍)Firefox/3.0.3
标签保存.
Mozilla/5.0(Windows; U; Windows NT 5.1; zh-CN; rv:1.9.0.15)Gecko/2009101601 Firefox/3.0.15
标签消失了.
我正在使用Flexmock模拟框架用Rspec2编写测试.我希望我的一种方法可以缓存结果,并希望用我的模拟验证这一点.
describe SomeClass do
before do
@mock = flexmock()
end
after do
@mock.flexmock_verify()
end
it "method caches results"
c = SomeClass.new(@mock)
c.method
@mock.should_receive(:expensive_method).never
c.method.should == ['A']
end
end
Run Code Online (Sandbox Code Playgroud)
如果我想确保:expensive_method
永远不会被调用,这种方法很有效.但是,我希望我的类能够在:method
不调用传入(模拟)类的情况下执行任何操作.有没有办法表达这个?
背景:在我的例子中,注入的类执行昂贵的操作,因此应该为相同的查询缓存结果.
更新
感谢到目前为止的建议,也许我只是假设错误或者我想要的甚至没有意义.我实现缓存的方法是将一个类变量放入SomeClass
并添加到:method
:
def SomeClass
@@cache_map = {}
def method
# extract key
return @@cache_map[key] if @@cache_map.has_key?(key)
# call :expensive_method to get result
@@cache_map[key] = result
return result
end
end
Run Code Online (Sandbox Code Playgroud)
现在,为了测试正确的缓存,我必须:extensive_method
至少调用一次来加载缓存.我喜欢David Chelimsky的解决方案,但它没有回答我的原始意图,即:测试在第一次调用SomeClass.method
注入类之后再也没有调用(既不是:expensive_method
也不是其他).
我是一个相当新的RoR和黑客攻击一个小应用程序.为了显示表单中某些模型列的现有值,我目前这样做:
<% form_for([@testbox, @testitem]) do |f| %>
<%= f.label :sortkey %><br />
<%= f.collection_select :sortkey, Testitem.groups , :sortkey, :sortkey, {:include_blank => true} %>
<% end %>
Run Code Online (Sandbox Code Playgroud)
在模型中Testitem
我有:
def Testitem.groups
return find_by_sql("SELECT DISTINCT sortkey from testitems; ")
end
Run Code Online (Sandbox Code Playgroud)
我相信有更优雅的解决方案吗?我试过find(:all).sortkey.unique
但是那个抛出undefined method 'sortkey' for #<Array:0x59d1b60>
我在模型中有一些地方可以做类似的事情
def ServerInfo.starttime(param)
find(:all, :conditions => "name ='#{param}_started'", :select => "date").first.date.to_datetime
end
Run Code Online (Sandbox Code Playgroud)
现在,由于与问题无关的原因,可能会发生这个特定行根本不在数据库中,并且上面的代码失败了NoMethodError (undefined method `date' for nil:NilClass):
.我目前的解决方案是
res = find(:all, :conditions => "name ='#{param}_started'", :select => "date")
check_time = res.first.nil? ? 0 : res.first.date.to_datetime
Run Code Online (Sandbox Code Playgroud)
这可以找到,但我觉得在整个地方撒上代码是不对的.是否有更多的ruby-ish/rail-ish方法来防止解除引用nil?