我正在寻找运行一些未经验证的脚本(用一种尚未确定的语言编写,但需要基于Java,因此JRuby,Groovy,Jython,BeanShell等都是候选者).我希望这些脚本能够做一些事情并限制做其他事情.
通常,我只是使用Java的SecurityManager并完成它.这非常简单,让我限制文件和网络访问,关闭JVM的能力等等.这对我想要阻止的高级别东西很有效.
但是我想要允许一些东西,但只能通过我提供的自定义API /库.例如,我不想允许直接网络访问打开到yahoo.com的URLConnection,但如果使用MyURLConnection完成,我没关系.那就是 - 我想要允许的一组方法/类,然后我想要的其他一切不受限制.
我不相信这种类型的安全性可以使用标准的Java安全模型来完成,但也许它可以.我对脚本语言本身的性能或灵活性没有特定要求(脚本将通过基本循环/分支对我的API进行简单的过程调用).所以即使是一个"大"的开销来检查每次反射调用的安全检查也没问题.
建议?
我希望在Rails关闭时运行一些清理代码 - 这可能吗?我的情况是我在后台有一些线程(我正在使用jruby并调用java),这些线程一直存在于进程的生命中,我需要让他们知道关闭自己
谢谢!
前段时间我们将应用程序升级到Rails 4并切换到JRuby.
在此更改之前,迁移会将默认时间戳创建为NOT NULL.在更改之后,缺少NOT NULL.
我们创建这些时间戳(created_at,updated_at)如下:
class Model < ActiveRecord::Migration
def change
create_table :model do |t|
t.belongs_to :user, :null => false
t.text :content
t.timestamps
end
end
end
Run Code Online (Sandbox Code Playgroud)
我们的应用程序的重要部分是:
您是否知道可能导致问题的原因以及我们如何将默认生成更改回NOT NULL?
我有一个Sinatra"hello world"应用程序,我试图使用jRuby运行.它在我运行应用程序时有效,但在我运行机架时则无效.谁能告诉我这里发生了什么?
这是应用程序,在'app.rb'文件中:
require 'rubygems'
require 'bundler/setup'
require 'sinatra'
configure do
set :bind, '0.0.0.0'
end
get '/' do
'Boo!'
end
Run Code Online (Sandbox Code Playgroud)
我可以运行它bundle exec ruby app.rb,它工作正常:
jonea@centos7andy[~/andy/sinatra_sand_jruby]%: bundle exec ruby app.rb
[2015-01-12 10:36:06] INFO WEBrick 1.3.1
[2015-01-12 10:36:06] INFO ruby 1.9.3 (2014-12-09) [java]
== Sinatra/1.4.5 has taken the stage on 4567 for development with backup from WEBrick
[2015-01-12 10:36:06] INFO WEBrick::HTTPServer#start: pid=31654 port=4567
Run Code Online (Sandbox Code Playgroud)
这是我的config.ru来调用上面的程序:
require 'rubygems'
require 'bundler/setup'
require 'sinatra'
require './app'
run Sinatra::Application
Run Code Online (Sandbox Code Playgroud)
如果我运行它,它似乎工作,但我无法使用Web浏览器访问服务器:
jonea@centos7andy[~/andy/sinatra_sand_jruby]%: bundle exec rackup -p4567 …Run Code Online (Sandbox Code Playgroud) 我正在使用Jruby和rails 2.2.2.我的问题是我的迁移未正确写入数据库模式.
这是我的迁移:
class CreateNotes < ActiveRecord::Migration
def self.up
create_table(:notes, :options => 'ENGINE=MyISAM') do |t|
t.string :title
t.text :body
t.timestamps
end
execute "alter table notes ADD FULLTEXT(title, body)"
end
Run Code Online (Sandbox Code Playgroud)
这是它在schema.rb中生成的内容
create_table "notes", :force => true do |t|
t.string "title"
t.text "body"
t.datetime "created_at"
t.datetime "updated_at"
end
add_index "notes", ["title", "body"], :name => "title"
Run Code Online (Sandbox Code Playgroud)
我有两个问题:
'ENGINE=MyISAM'进入架构?add_index "notes", ["title", "body"], :name => "title"?以及如何强制迁移将其作为执行语句保留?感谢Christian Lescuyer的回答.但是,当我尝试这个没有改变.我取消注释了config.active_record ...行,但我的架构没有改变.我已经尝试了jruby和ruby 1.8.6上的rails 2.2.2和edge rails,架构没有变化.谁能告诉我我做错了什么?
Java问:我喜欢CSS用于简单的网页,但是当涉及现实世界的网站时,它会厌恶它,因为你得到了css爆炸和大量的重复.
我很想使用Sass和Compass,但它们是Ruby程序,很可能需要一些有趣的Maven + JRuby才能为Java Web app dev工作.如果您使用Eclipse或支持与正在运行的Web应用程序同步的任何IDE,这也会很困难.
对于地狱中的CSS,还有一个更好的替代方案是Java吗?
有没有人尝试使用Ruby开发Android应用程序?如果是这样,你会推荐哪种工具?比较(两者之间)有什么优缺点?
任何经验,见解等的分享将非常感激.
我很简单地需要在Clojure中使用Ruby类.复杂的因素是该类是在宝石中提供的.最佳方法是按照以下方式设置我的Leiningein项目文件:
(project foo ""
...
:dependencies [[clojure ...]
[jruby ... ]])
Run Code Online (Sandbox Code Playgroud)
同样,我更愿意只检查gem及其依赖项到本地repo目录中.因此,从我理想的用法是:
(ns bar.baz
(require [jruby.something :as jruby])
(def obj (jruby/CreateAnInstance "TheGemClass"))
(def result (jruby/CallAMethod obj "method_name" some args))
Run Code Online (Sandbox Code Playgroud)
谢谢.
编辑:我改变了标题,因为问题不是我最初的想法.事实上,logstash需要一分多钟才能启动,这可能被误解为"沉默"......
我正在尝试使logstash运行,所以我按照官方网站上的说明进行独立安装:http://logstash.net/docs/1.1.4/tutorials/getting-started-simple
基本上,我得到了logstash-1.1.4-monolithic.jar文件,然后构建一个非常简单的配置文件:( example.conf)
input {
stdin { type => "stdin-type" }
}
output {
stdout { debug_format => "json" }
}
Run Code Online (Sandbox Code Playgroud)
但是当我运行logstash时,什么都没有出来(我在STDIN中键入随机文本,但没有得到响应):
# java -jar logstash-1.1.4-monolithic.jar agent -f example.conf
Test
toto
hey ??? Wakeup !!!
^C
Run Code Online (Sandbox Code Playgroud)
(有关信息:Java版本是正确的)
# java -version
java version "1.6.0_26"
Java(TM) SE Runtime Environment (build 1.6.0_26-b03)
Java HotSpot(TM) Client VM (build 20.1-b02, mixed mode, sharing)
Run Code Online (Sandbox Code Playgroud)
拜托,有人能告诉我我错过了什么吗?