是否可以在安装时有条件地设置对gem的依赖?这是我的情况,希望澄清这个问题.
我维护的宝石取决于json宝石.但是,我经常使用jruby,它有一个名为json-jruby的json gem的端口.要解决这个问题,我必须为每个依赖项构建两个单独的gem.我想构建一个gem,要么说它依赖于json或json-jruby,要么它在安装时检查并使用正确的依赖.
任何人都有一个很好的解决方案吗?
有没有人有明确的说明设置jRuby与IIS一起工作.
编辑:
我正在寻找的是使用IIS和jRuby在Windows上运行Ruby on Rails应用程序的分步说明.原因是因为我在野外提出问题时找不到其他任何"使用Linux".对于大多数人来说,Windows是主要的开发和部署环境,因此使用基于Linux的服务器是不可能的.此外,IIS还包含在Windows中,并提供与Active Directory的出色集成,因此使用Apache也是不可能的.
最后一件事是使用war文件是一场噩梦,请包括如何通过复制文件或其他任何使用war文件来部署rails应用程序的说明.
我们公司开始使用单一产品,一些由一些Java服务支持的rails应用程序,然后决定他们想要另一种产品,这种产品最初与第一种产品有很大不同,但随着时间的推移,我们已经意识到它们已经开始融合,并且将代码更改为一个需要对另一个进行类似的代码更改以进行新功能/错误修复.这显然是一种痛苦.
在某些情况下,我们拥有共享一些此功能的宝石,但它超越了ruby到javascript,css等.
所以我的任务是将这两个应用程序合并到一个代码库中.我认为最终我们希望它是一个具有基于权限的角色访问权限的应用程序,但这将会更晚.
我第一次想到将它们快速组合在一起就是创建两个rails引擎并在它们之间共享公共库.我认为这是组合代码,查找常见部分和开始共享的最快捷方式.
我的第一个问题是如何在应用程序之间进行路由.一个应用程序使用永远不会更改的单个域名,另一个应用程序具有许多域.有人可以建议我如何将特定请求路由到特定应用程序,以便在共享库的公共代码库时可以保持独立开始吗?
或者,如果有人对如何组合这些应用程序有其他建议,我会全神贯注.
它们都是运行JRUBY 1.5.3的Rails 2.3.10应用程序,但是我们可能会升级到Rails3,如果这会使事情变得更容易或更清晰(即更好的Rack集成)
我没有做任何Rack编程,但从来没有伤害过,如果这将使我们的生活更轻松.
在使用定义const_missing和定义中的其他类方法class << self而不是使用def self.foo语法时,我对Ruby的行为感到非常困惑.
我试图做这样的事情:
class Foo
class << self
def foo
puts MISSING
end
def const_missing(name)
puts "#{name} missing"
end
end
end
Foo.foo
Run Code Online (Sandbox Code Playgroud)
我主要使用class << self语法来定义类方法.但是,它没有按预期工作.const_missing永远不会被称为.以上结果是NameError.
定义这样的两种方法按预期工作:
def self.foo
puts MISSING
end
def self.const_missing(name)
puts "#{name} missing"
end
Run Code Online (Sandbox Code Playgroud)
我认为class << self语法只是定义类方法的另一种方式,但完全等同于def self.foo?我用MRI 1.8.7,1.9.2和JRuby 1.5.6测试了上述内容.显然我在这里遗漏了一些东西?
非常感谢任何提示.
谢谢,马丁
我有以下场景:
我需要在一个非常大的集合中找出唯一的id列表.
例如,我有6000个ID数组(关注者列表),每个数据的大小范围在1到25000之间(他们的关注者列表).
我希望在所有这些ID数组中找到唯一的id列表(追随者的独特关注者).一旦完成,我需要减去另外一个列表(另一个人跟随者列表)的ID并获得最终计数.
最后一组独特的ID增长到大约60,000,000条记录.在ruby中将数组添加到大数组时,它开始变得非常慢,只有几百万.添加到设置首先需要0.1秒,然后增加到超过4秒,达到200万(没有我需要去的地方).
我在java中编写了一个测试程序,它在不到一分钟的时间内完成了整个过程.
也许我在红宝石中效率低下,或者有另一种方式.由于我的主要代码是专有的,我编写了一个简单的测试程序来模拟问题:
big_array = []
loop_counter = 0
start_time = Time.now
# final target size of the big array
while big_array.length < 60000000
loop_counter+=1
# target size of one persons follower list
random_size_of_followers = rand(5000)
follower_list = []
follower_counter = 0
while follower_counter < random_size_of_followers
follower_counter+=1
# make ids very large so we get good spread and only some amt of dupes
follower_id = rand(240000000) + 100000
follower_list << follower_id
end
# combine the big …Run Code Online (Sandbox Code Playgroud) 我怎么编译使用JRuby应用程序莺是不是在网络上呢?这总是在我尝试时发生的事情:
$ warble
warble aborted!
No executable script found
Tasks: TOP => jar:files
(See full trace by running task with --trace)
Run Code Online (Sandbox Code Playgroud)
我必须错误地使用它.有谁知道如何正确编译JRuby应用程序?
我们在tomcat下运行了一个java/jruby webapp,我一直在分析应用程序在运行时使用的对象和内存的数量.我注意到在启动后,类"org.jruby.RubyString"有1,118,000个字符串""的实例,空字符串单独使用的堆内存总量是65mb,这对我来说是荒谬的,因为它是15%的内存由webapp使用.空字符串只是这个问题的许多字符串值的一个例子,如果我可以实习我制定的所有jruby字符串,我可以节省大约130mb.
我知道在Java中,每次创建字符串值时,它都会检查字符串池中是否已存在该值,如果存在则重用它.我想知道Jruby中是否有一个具有相同优化的选项?如果是这样,我该如何启用它?
Jruby中的示例:
v1 = "a"
v2 = "a"
puts v1.object_id # => 3352
puts v2.object_id # => 3354
Run Code Online (Sandbox Code Playgroud)
Java中的示例:
String v1 = "a";
String v2 = "a";
System.out.println(v1.hashCode()); # => 97
System.out.println(v2.hashCode()); # => 97
Run Code Online (Sandbox Code Playgroud) 我希望将一个ruby(JRuby)包装器放在一个中等大小的Java库上,我正在寻找有关从包装到策略的各种最佳实践的建议和文章.
我在这里找到了一个关于这个主题的相对过时的(2009)讨论:http://www.ruby-forum.com/topic/188447.
我想使用最新版本的JRuby.
我想在gemspec中包含'jar依赖',这些是本地的,例如
/opt/someplugin/lib/somejar.jar
目前,我发现在项目中使用本地jar文件的唯一方法是在*.rb文件中 require /opt/someplugin/lib/somejar.jar
它将使用jar依赖关系查看DynamoDB gemspec的快照
# Jar dependencies
s.requirements << "jar 'com.amazonaws:amazon-kinesis-client', '1.6.0'"
s.requirements << "jar 'log4j:log4j', '1.2.17'"
s.requirements << "jar 'com.amazonaws:aws-java-sdk-dynamodb', '1.10.10'"
s.requirements << "jar 'com.amazonaws:aws-java-sdk-core', '1.10.10'"
s.requirements << "jar 'com.amazonaws:dynamodb-import-export-tool', '1.0.0'"
s.requirements << "jar 'commons-logging:commons-logging', '1.1.3'"
s.requirements << "jar 'com.amazonaws:dynamodb-streams-kinesis-adapter', '1.0.0'"
s.requirements << "jar 'com.google.guava:guava', '15.0'"
s.add_runtime_dependency 'jar-dependencies'
Run Code Online (Sandbox Code Playgroud)
会发生什么是gem build从maven存储库下载jar文件.
我希望与我的文件系统中的本地jar实现相同的"效果".
示例可能看起来像我需要的命令:
caution ?not real? gemspec line: s.requirements << "jar '/opt/someplugin/lib/somejar.jar', '1.0.0"
Run Code Online (Sandbox Code Playgroud)
谢谢你的帮助.
I have a large rails app converted successfully to use JRuby and it runs locally without any issues bundle exec rails s -b 0.0.0.0.
I'm now trying to create a deployable WAR file using the following:
bundle exec warble executable war
This completes successfully without errors, but when running it with:
java -jar application.war
It boots up and then after a few seconds, it spits out this error:
2016-06-28 11:48:16.544:INFO::main: Logging initialized @228ms
2016-06-28 11:48:16.553:INFO:oejr.Runner:main: Runner
2016-06-28 11:48:16.698:INFO:oejs.Server:main: jetty-9.2.9.v20150224 …Run Code Online (Sandbox Code Playgroud) jruby ×10
java ×5
ruby ×4
jar ×2
warbler ×2
compilation ×1
dependencies ×1
iis ×1
migration ×1
optimization ×1
performance ×1
rack ×1
rubygems ×1
string ×1