小编Zub*_*Man的帖子

Java二进制兼容性发生了什么变化?

我在1997年3月遇到了一组旧的课程.那是在我尝试学习Java的时候,它是JDK 1.0.2

有趣的是,从那时起我的源文件和类文件都完好无损.源仍然按预期编译和执行,这真的很酷.但Java不应该保留二进制兼容性吗?好吧,在某个地方,格式不再有效.Java 8 VM将报告;

Exception in thread "main" java.lang.ClassFormatError: Invalid start_pc 65535 in LocalVariableTable in class file bali/core/Application
    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClass(ClassLoader.java:760)
    at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
    at java.net.URLClassLoader.defineClass(URLClassLoader.java:455)
    at java.net.URLClassLoader.access$100(URLClassLoader.java:73)
    :
    [snip many ClassLoader calls]
    :
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:495)
Run Code Online (Sandbox Code Playgroud)

违规类是我从命令行调用的类的超类.

还有一个细节,在那些日子里,微软仍然在Java阵营中,我记得他们的javac更符合严格的语法.Sun编译器很乐意接受"公共同步类Abc"和许多其他无效语句.因此,这些类文件很可能是由MS编译器生成的,然后在Sun JVM上运行.

无论如何,我的问题是; 是否有人知道Java早期版本中的兼容性承诺?这是一个大问题,还是故意牺牲?或者是否有更晚的决定,比如说Java 1.4或Java 5只是简单地丢弃JDK 1.0支持?

java history

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

CI上的Capybara Poltergeist Dead Client错误

我有一个使用Angular JS渲染视图的Rails应用程序,我正在使用Rspec,Jasmine和Capybara测试这个应用程序,PhantomJS作为驱动程序通过Poltergeist.本地所有测试都在100%的时间内通过,但偶尔当有人推送应用程序并且在TravisCI上执行测试时,至少有一个javascript测试会失败并出现以下错误:

Capybara::Poltergeist::DeadClient:
  PhantomJS client died while processing {
    "id":"2660b299-8222-43da-a377-abd381d45ce0",
    "name":"visit",
    "args":["http://127.0.0.1:41235/",30]
  }
Run Code Online (Sandbox Code Playgroud)

令人难以置信的是,哪些测试会失败,但这导致测试套件几乎每次都失败(再次,不一致)并阻止我们的应用程序自动部署.我用Google搜索了问题可能会遇到描述类似问题的GitHub问题,但没有提供任何解决方案.

Gem版本是:

Poltergeist - 1.9.0
PhantomJS   - 2.1.1.0
Run Code Online (Sandbox Code Playgroud)

任何帮助是极大的赞赏!

rspec capybara phantomjs poltergeist

7
推荐指数
0
解决办法
618
查看次数

Sinatra Rspec-测试视图是否已呈现

我正在为Sinatra应用编写测试,该应用通过gem从API接收输入。收到API响应后,我需要测试模板是否正确呈现。API的响应将是我正在加载的页面的HTML。

我的第一个直觉是编写一个如下所示的测试:

describe 'the root path'
  it 'should render the index view' do
    get '/'

    expect(last_response).to render_template(:index)
  end 
end
Run Code Online (Sandbox Code Playgroud)

不幸的是,当我尝试这样做时,出现以下错误: undefined method `render_template'

我想知道是否有人遇到过这个问题-似乎应该很容易解决,但是我似乎找不到任何文档来解决这个问题。

testing rspec sinatra

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

如何从Integer获取最右边的数字 - Ruby

我正在制作一个程序,要求我读入并验证一个数字,但这样做我需要取一个两位数的整数(例如我们会说18)并将它加1 + 8.现在我有它的工作在哪里我做一个条件检查,如果它大于10并减去,但在我看来这是一种丑陋的解决方案,并想知道是否有更清洁的方法吗?

ruby integer digit

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

在 Rails 应用程序中解析 PostgreSQL 结果对象

我正在编写一个需要快速处理数十万行数据的应用程序,因此我研究了使用 将原始 SQL 嵌套在我的 Ruby 代码中ActiveRecord::Base.connection.execute,它运行良好。但是,每当我运行它时,我都会得到以下对象:

#<PG::Result:0x007fe158ab18c8 status=PGRES_TUPLES_OK ntuples=0 nfields=1 cmd_tuples=0>
Run Code Online (Sandbox Code Playgroud)

我已经用谷歌搜索了,找不到将 PG 结果解析为真正有用的东西的方法。是否有任何内置的 PG 方法可以做到这一点,或者是一种解决方法,还是其他任何东西?

这是我正在使用的查询:

SELECT row_to_json(row(company_name, ccn_short_title, title))
FROM contents
WHERE contents.company_name = '#{company_name}'
AND contents.title = '#{title}';
Run Code Online (Sandbox Code Playgroud)

ruby postgresql ruby-on-rails

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

ActiveRecord - 获取表的所有属性

我正在创建一个 gem,它必须与如何配置表上的属性的任何可能组合一起使用 - 我使用它的特定情况是反馈,因此我们将在本示例中使用它:

鉴于以下项目:

Feedback {
  :id => 1,
  :comments => "Works well",
  :recommendations => "Change this one thing"
}
Run Code Online (Sandbox Code Playgroud)

我将不得不将数据提取为{id: 1, comments: "Works Well", recommendations: "Change this one thing"},如果我知道我处理的特定字段是毫无意义的。不幸的是,我需要它来很好地处理反馈表上的任何排列或字段集合。

所以我的问题是:Rails 或 ActiveRecord 是否有一种方法可以让我简单地获取所有字段和散列中的相关数据/是否有办法使用 ActiveRecord 迭代数据库中项目的值。我已经尝试将项目转换为哈希,使用 to_params 方法,以及其他典型的技巧来获取键/值对中的键和值,但无济于事。

谢谢!

ruby activerecord ruby-on-rails

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

根据登录时的用户角色设计重定向到特定页面

我有一个用户三种可能的权限是在我的Rails应用程序,它们是User.is_adminUser.is_schoolUser.is_security。根据我的应用程序的性质,我需要为每个做完全不同事情的用户有一个单独的主屏幕,我正在工作。我遇到的问题与所有用户登录后设计如何自动重定向到 root_path 相关,而不管我设置的权限如何。

我将 Devise Sessions 控制器生成到 Users 命名空间中,并将其覆盖为默认为我的控制器,但是现在当我尝试根据条件权限进行重定向时,我得到了一个DoubleRenderError(明显的原因是 Devise 正在其他地方重定向创建会话时)。

我已经尝试将它作为 after_action 运行,甚至尝试after_sign_in_path_for按照 Devise 文档的方向覆盖该 方法,但我仍然无法让它工作。任何帮助将不胜感激,谢谢!

ruby redirect ruby-on-rails devise

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

Ruby线程池-我在做什么错?

我的Postgres数据库的“内容”表中有250万条记录,我需要遍历这250万条记录中的每条记录,并执行许多操作(其中许多操作很慢),最后根据记录更新记录我一路走来-一切正常-问题,这需要流血的运行。

我碰到了几篇关于多线程这样的工作的文章(我以前在C中做过,但是从来没有在Ruby中做过),以及在Ruby中使用线程的利弊,尽管有这些弊端,但我能摆脱的2000个线程还是有很多这比不使用线程而运行的速度要快,但是一次只能获得2000个折扣,这使我无法真正更新全部250万条记录。这是我为此的代码:

Content.all.each do |content|
  threads << Thread.new do
    grab_and_store(content)
  end
  index += 1
  index % 100 == 0 ? (puts index) : nil
end
threads.map(&:join)
Run Code Online (Sandbox Code Playgroud)

我还阅读了有关线程池的知识,一旦它们完成了原来的工作,就使用相同的线程来完成其他工作,但是我似乎无法使其正常工作。这是我的代码:

POOL_SIZE = 1000

jobs = Queue.new
Content.all.each{ |x| jobs.push x }

workers = (POOL_SIZE).times.map do
  Thread.new do
    begin
      while x = jobs.pop(true)
        grab_and_store(x)
      end
    rescue ThreadError
    end
  end
end
workers.map(&:join)
Run Code Online (Sandbox Code Playgroud)

当我运行此命令时,出现一个错误,我无法在nil类上执行.join,这意味着在此操作结束时worker为nil。但是,当我摘下基于它的代码(如下所示和source)并运行时,它可以完美地运行。我似乎无法弄清楚我的问题在哪里/如何最好地实现线程池以阻止我的代码在2000个线程后耗尽资源。

谢谢!

PS继承自我使用的教程中的代码:

require 'thread'
work_q = Queue.new
(0..50).to_a.each{|x| work_q.push x }
workers = (0...4).map do
  Thread.new do
    begin
      while x …
Run Code Online (Sandbox Code Playgroud)

ruby multithreading ruby-on-rails

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

将 Rails form_for 提交按钮上的值与文本分开

我有一个 Rails 4 应用程序,它使用 form_for 构建基本博客类型的表单,一切都按预期工作,除了一件事:我必须根据用户选择的提交按钮来确定博客的发布状态他们提交表格。这是我的 HAML 代码:

= form.submit 'Save as Draft', value: 'Draft', name: 'publish_state', class: 'button'
= form.submit 'Publish', value: 'Published', name: 'publish_state', class: 'button'
Run Code Online (Sandbox Code Playgroud)

在此设置中,有两种不同的状态PublishedDraft,两者都被视为数据库中的字符串。

我遇到的问题是,即使我指定了要说的按钮'Save as Draft''Publish'它们也只是根据它们的值'Draft'分别显示'Published'。我四处搜索,只能找到如何指定值或文本,而不能将两者分开。Rails 表单中有没有办法允许这样做?或者,如果不是 Rails 形式,还有哪些其他有效的方法?

===================

tl;dr - 如何使 Rails 表单中的按钮显示一个字符串并在单击时返回另一个字符串?

ruby forms ruby-on-rails

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