小编Bra*_*rad的帖子

为什么Ruby String.hash跨机器不一致?

今天在我们正在多台服务器上部署的应用程序中遇到了这个问题.我正在散列一些字符串以存储在共享键/值存储中.String的.hash方法根据服务器返回不同的整数.有什么想法吗?请注意,我感兴趣的原因 ; 不可能的工作.

例:

server1 $ ruby -v
ruby 1.9.2p180 (2011-02-18 revision 30909) [x86_64-linux]

server1 $ irb
irb(main):001:0> "test".hash
=> 4146582576695053125


server2 $ ruby -v
ruby 1.9.2p180 (2011-02-18 revision 30909) [x86_64-linux]

server2 $ irb
"test".hash
=> 3479379392688537032
Run Code Online (Sandbox Code Playgroud)

这些机器是EC2实例,具有相同的规格和构建.

ruby hash ruby-on-rails-3

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

无法使用rspec进行存根辅助方法

我试图在我的控制器中定义的助手上存根方法.例如:

class ApplicationController < ActionController::Base
  def current_user
    @current_user ||= authenticated_user_method
  end
  helper_method :current_user
end

module SomeHelper
  def do_something
    current_user.call_a_method
  end
end
Run Code Online (Sandbox Code Playgroud)

在我的Rspec中:

describe SomeHelper
  it "why cant i stub a helper method?!" do
    helper.stub!(:current_user).and_return(@user)
    helper.respond_to?(:current_user).should be_true # Fails
    helper.do_something # Fails 'no method current_user'
  end
end
Run Code Online (Sandbox Code Playgroud)

spec/support/authentication.rb

module RspecAuthentication
  def sign_in(user)
    controller.stub!(:current_user).and_return(user)
    controller.stub!(:authenticate!).and_return(true)

    helper.stub(:current_user).and_return(user) if respond_to?(:helper)
  end
end

RSpec.configure do |config|
  config.include RspecAuthentication, :type => :controller
  config.include RspecAuthentication, :type => :view
  config.include RspecAuthentication, :type => :helper
end
Run Code Online (Sandbox Code Playgroud)

在这里 …

rspec ruby-on-rails rspec2 rspec-rails ruby-on-rails-3

22
推荐指数
4
解决办法
2万
查看次数

GWT Requestfactory性能建议

在使用GWT requestfactory时,我观察到非常糟糕的性能.例如,将我的服务层花费2秒到fullfil的请求将GWT花费20秒来序列化.我的服务正在返回~100将是EntityProxies.这些对象中的每一个都将成为4个ValueProxies和2个EntityProxies(100个根级EntityProxies,400个ValueProxies和200个额外的EntityProxies).但是,我发现在更小的数据集上,性能降低了10倍.

日志片段示例:

D 2012-10-18 22:42:39.546 ServiceLayerDecorator invoke: Inoking service layer took 2265 ms
D 2012-10-18 22:42:58.957 RequestFactoryServlet doPost: Entire request took 22870 ms
Run Code Online (Sandbox Code Playgroud)

我在ServiceLayerDecorator#invoke方法中添加了一些分析代码,并将整个servlet包装在一个计时器中.我已经自己分析了服务,它确实在~2s内返回结果.

我正在使用GWT 2.4,但已经在GWT 2.5rc1和GWT 2.5rc2上进行了测试.我的后端是GAE,但我不认为这是在这里发挥作用.

我发现这个针对2.4的错误,这似乎是非常相关的.我已经手动应用了这个谷歌群组的补丁而没有任何运气.

我的域名模型如下:

class Trip {
  protected Address origin; // becomes ValueProxy
  protected Address destination; becomes ValueProxy
  protected Set<TripPassenger> tripPassengers; // Set of ValueProxies
}

class TripPassenger {
  protected Passenger passenger;
}

class Passenger {
  protected Account account;
}
Run Code Online (Sandbox Code Playgroud)

我的问题是:

  • 我是否正确分析了代码并将问题隔离到GWT序列化?
  • 我可能做错会导致这种行为吗?
  • 如何更好地分析GWT序列化代码以试图找出原因?

gwt gwt2 requestfactory

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

RMI和CORBA的差异?

我正在学习决赛,并且有一些关于RMI和CORBA的问题.这些是从学习指南中获取的讨论问题,因此没有真正的应用背景.

  1. 为什么RMI和CORBA基于TCP?问题表明要根据调用语义来回答.

到目前为止我所想到的是TCP将比UDP更可靠,而在RMI/CORBA中,我们需要网络可靠性.我还读到了TCP深深嵌入本机Java网络类的地方.我对此声明没有信心,因为CORBA可以用任何语言实现.

  1. 讨论RMI和CORBA名称服务之间的区别.

我对这个问题有点困惑,因为我到目前为止所读到的是RMI和CORBA是融合技术,RMI可以访问CORBA对象.我现在如何理解,名称服务似乎非常相似,任何差异都不值得注意.

  1. 为什么RMI需要显式动态调用而不像CORBA?

我没想出任何东西.

我意识到我问了三个不同的问题,但它们似乎都有关系.

java corba rmi

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

如何在弹性搜索中避免使用嵌套类型的跨对象搜索行为

我试图确定在弹性搜索中索引文档的最佳方法.我有一个文档Doc,它有一些字段:

Doc
  created_at
  updated_at
  field_a
  field_b
Run Code Online (Sandbox Code Playgroud)

但Doc也会有一些特定于个人用户的字段.例如,field_x对于用户1将具有值"A",并且field_x将具有用于用户2的值"B".对于每个文档,将存在非常有限数量的用户(通常为2,最多~10).当用户搜索field_x时,他们必须搜索属于它们的值.我一直在探索ES中的嵌套类型.

Doc
  created_at
  updated_at
  field_x: [{
    user: 1
    field_x: A
  },{
    user: 2
    field_x: B
  }]
Run Code Online (Sandbox Code Playgroud)

当用户1在field_x上搜索值"A"时,此文档应该会受到影响.但是,当用户1按值'B'搜索时,不应该这样.

但是,根据文档:

索引在doc中多次出现的内部对象时的一个问题是将发生"交叉对象"搜索匹配

有没有办法避免嵌套类型的这种行为或我应该探索另一种类型?

有关此类查询执行情况的其他信息非常有价值.仅仅从阅读文档开始,它就表明嵌套查询在性能方面与常规查询相比并没有太大差异.如果有人真正体验过这一点,我很乐意听到.

elasticsearch

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

mvn test java.lang.OutOfMemoryError:无法创建新的本机线程

当我跑步时,mvn test我收到以下异常.我已尝试升级和降低我的Xmx和Xss JVM设置,并在ulimit下突破所有限制.大约有1300个测试,最后200个测试总是因此异常而失败.自己运行这些测试允许它们通过.相同的测试在我的ubuntu盒子上传递.我在mac上运行测试时收到此异常.我很确定它是一个环境问题,但我已经调整了我所知道的每一个设置,绝对没有运气.

我使用的是mvn 2.1和Java 6.我的测试框架是junit 4.8.

java.lang.OutOfMemoryError: unable to create new native thread
        at java.lang.Thread.start0(Native Method)
        at java.lang.Thread.start(Thread.java:658)
        at java.util.concurrent.ThreadPoolExecutor.addIfUnderMaximumPoolSize(ThreadPoolExecutor.java:727)
        at java.util.concurrent.ThreadPoolExecutor.execute(ThreadPoolExecutor.java:657)
        at java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:92)
        at com.google.appengine.tools.development.ApiProxyLocalImpl$PrivilegedApiAction.run(ApiProxyLocalImpl.java:197)
        at com.google.appengine.tools.development.ApiProxyLocalImpl$PrivilegedApiAction.run(ApiProxyLocalImpl.java:184)
        at java.security.AccessController.doPrivileged(Native Method)
        at com.google.appengine.tools.development.ApiProxyLocalImpl.doAsyncCall(ApiProxyLocalImpl.java:172)
        at com.google.appengine.tools.development.ApiProxyLocalImpl.makeAsyncCall(ApiProxyLocalImpl.java:138)
Run Code Online (Sandbox Code Playgroud)

java jvm junit4 surefire maven

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

无法创建ValueProxy

我正在尝试创建一个ValueProxy包含用户正在执行的搜索的一些基本信息.出于某种原因,GWT希望它是一个EntityProxy,但我不明白为什么(这个类也不是有意义的EntityProxy).

// FilterProxy extends ValueProxy
@ProxyFor(DayFilter.class)
public interface DayFilterProxy extends FilterProxy {

    void setFilterValue(Date day);
    Date getFilterValue();
}

public class DayFilter extends Filter {

    public DayFilter() {
        setOperator(FilterOperator.GREATER_THAN_OR_EQUAL);
        setField("dateRequested");
    }

    public void setFilterValue(Date date) {
        this.value = date;
    }

    public Date getFilterValue() {
        return value;
    }
}

public interface PaginationRequest<T> extends RequestContext {

    Request<List<T>> paginate(int offset, int limit, String sortColumn,
            boolean isSortAscending, List<FilterProxy> filters);

    Request<Integer> count(List<FilterProxy> filters);
}

@Service(value=TripService.class, locator=SchedgyServiceLocator.class)
public interface TripRequest extends PaginationRequest<TripProxy> {

    Request<TripProxy> save(TripProxy …
Run Code Online (Sandbox Code Playgroud)

java gwt requestfactory

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

GWT手动序列化服务器上​​的域对象

我的GWT应用程序加载时首先要做的是通过RequestFactory从服务器请求当前登录用户.这会阻止,因为我需要用户的属性才能知道如何继续.这只需要<500毫秒,但在此期间应用程序被阻止真的让我感到很恼火.生成jsp时,我已经在服务器上安装了User,那么为什么不将序列化的User添加到jsp中并完全消除这个请求呢?

我有两个问题阻止我这样做:

  • 我需要将User转换为UserProxy
  • 我需要以一种易于GWT反序列化的方式序列化UserProxy.

我还没有找到一个做好#1的好方法.这个逻辑似乎埋没在ServiceLayerDecorator中,没有一种简单的方法可以隔离?我可能在这里错了.

第二个似乎通过ProxySerializer更容易但是当我在服务器上时如何获得requestfactory?你不能GWT.create在服务器上打电话.

我一直在研究AutoBeans,但这并没有处理上面的#1.我的UserProxy引用了我想要维护的其他EntityProxy的集合.

java gwt gwt2 requestfactory autobean

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

谷歌应用程序引擎java的应用程序监控

在谷歌应用引擎上监控我的Java应用程序的最佳方法是什么?我意识到错误被记录下来,我可以在管理控制台中检查它们,但我想要更加积极主动.我希望在发生错误时立即得到通知.

java logging google-app-engine

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

Rails服务器返回HTTP状态0

我知道有时客户端会在请求无法连接,超时等时返回0状态代码显示HTTP请求,但我从未见过服务器将0记录为发送回客户端的内容.

我正在运行Rails 4.2,ruby 2.2.x API.前几天我正在分析我们的日志,并注意到我们的Rails API正在响应HTTP状态代码为0的非平凡数量的请求.我一直无法弄清楚原因.

在某些情况下,似乎请求永远不会进入rails应用程序.我只看到我认为由机架记录的日志消息,其中包含返回的请求路径和状态.在其他情况下,我可以看到我们从应用程序控制器记录的早期日志消息之一.

有没有人见过这样的行为?如果不开始修改rails提供的标准机架中间件,我不确定如何进一步调试.我自己无法重现这种情况; 我只在日志中偶尔看到这个.

关于我们的堆栈的更多信息:

  • Rails 4.2.5
  • Ruby 2.2.3
  • Puma 3.4.0
  • 我们使用nginx进行反向代理,但我认为不会影响它,因为至少是机架收到了请求.

我意识到可能无法回答这里到底发生了什么,所以我希望能找到关于如何最好地解决这个问题的建议.

ruby ruby-on-rails puma

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

GAE java.lang.IllegalStateException:必须首先调用set*BlobStorage()之一

我正在尝试使用Blobstore API在GAE中上传文件.我在本地运行GAE服务器时遇到以下异常(开发模式):

WARNING: /_ah/upload/ag10cmlwc2NoZWR1bGVychsLEhVfX0Jsb2JVcGxvYWRTZXNzaW9uX18YFQw
java.lang.IllegalStateException: Must call one of set*BlobStorage() first.
 at com.google.appengine.api.blobstore.dev.BlobStorageFactory.getBlobStorage(BlobStorageFactory.java:24)
 at com.google.appengine.api.blobstore.dev.UploadBlobServlet.init(UploadBlobServlet.java:88)
 at javax.servlet.GenericServlet.init(GenericServlet.java:215)
 at org.mortbay.jetty.servlet.ServletHolder.initServlet(ServletHolder.java:440)
 at org.mortbay.jetty.servlet.ServletHolder.getServlet(ServletHolder.java:339)
 at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:487)
 at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1166)
Run Code Online (Sandbox Code Playgroud)

我正在运行GAE 1.3.5,但是自GAE 1.3.0(Blobstore的第一个版本)以来已经尝试过所有版本.我正在使用GAE maven插件:http://code.google.com/p/maven-gae-plugin/

我的表单是用GWT 2.0.4编写的.目前,表单只是一个带有提交的文件输入字段.

我在提交表格后收到上述例外情况.我能够从Blobstore服务成功检索上传URL.

在GAE上一切正常.我已经验证在本地开发环境中没有输入任何内容(通过开发管理控制台).我正在上传一张~1Kb的CSV,但尝试了其他文件类型/大小也没有成功(相同的文件适用于GAE prod).

gwt google-app-engine blobstore maven-gae-plugin google-cloud-datastore

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

保存图形时冻结GWT Autobean

我正在使用GWT 2.4编辑器并请求工厂框架.我有一个模型Trip,它有一个地址'origin'和一个Address'destination'.通过UI创建Trip时,会自动创建这两个地址并将其分配给Trip.用户填写详细信息并保存.出于某种原因,我在尝试持久化到服务器时遇到"autobean冻结错误".此代码在GWT 2.3中有效,我无法切换回来.我希望它不是GWT 2.4中的错误.以下是我正在做的一些示例代码:

RequestContext request = requestFactory.request();
TripProxy trip = request.create(TripProxy.class);
trip.setOrigin(request.create(AddressProxy.class));
trip.setDestination(request.create(AddressProxy.class));
driver.edit(trip, request);
this.trip = trip;

// … on save button clicked (different method)

RequestContext request = driver.flush();
request.save(trip).with(driver.getPaths()).fire(someReceiverImpl);
Run Code Online (Sandbox Code Playgroud)

结果是:

java.lang.IllegalStateException: The AutoBean has been frozen
at com.google.web.bindery.autobean.shared.impl.AbstractAutoBean.checkFrozen(AbstractAutoBean.java:195)
at com.google.web.bindery.autobean.shared.impl.AbstractAutoBean.setProperty(AbstractAutoBean.java:270)
at sun.reflect.GeneratedMethodAccessor53.invoke(Unknown Source)
Run Code Online (Sandbox Code Playgroud)

调用fire成功完成但在requestfactory内的某处,抛出上述错误.奇怪的是,实体保存在服务器上,但不强制执行验证.当我简化模型并删除地址关联时,验证和保存工作.我的主要问题是autobean冻结错误; 验证的东西是次要的.

编辑:经过进一步的调查,我发现实体正在使服务器正常,并按预期持续存在.它返回时抛出上述异常.AddressProxy是一个ValueProxy,它看起来像RF不喜欢Trip带回这些关联.返回null'修复'问题,但这显然不会长期工作.

java gwt gwt2 requestfactory

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