我有一个我创建的Sinatra应用程序,我想将它打包为基于gem的二进制文件.
我有我的gemspec和gem设置生成一个合适的可执行文件,指向my_sinatra_app.rb(可执行)但sinatra服务器永远不会运行.任何想法为什么以及如何使它工作?
my_sinatra_app 可执行文件:
#!/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/bin/ruby
#
# This file was generated by RubyGems.
require 'rubygems'
version = ">= 0"
if ARGV.first =~ /^_(.*)_$/ and Gem::Version.correct? $1 then
version = $1
ARGV.shift
end
gem 'my_sinatra_app', version
load Gem.bin_path('my_sinatra_app', 'my_sinatra_app', version)
Run Code Online (Sandbox Code Playgroud) 我附上了一个Sinatra应用程序Sinatra::Base,我想在服务器启动后运行一些代码,我该怎么做呢?
这是一个例子:
require 'sinatra'
require 'launchy'
class MyServer < Sinatra::Base
get '/' do
"My server"
end
# This is the bit I'm not sure how to do
after_server_running do
# Launches a browser with this webapp in it upon server start
Launchy.open("http://#{settings.host}:#{settings.port}/")
end
end
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?
我希望能够设置一个AngularJS http拦截器,它将设置$rootScope.loading为true或false取决于当前是否正在进行AJAX请求.
到目前为止,我已将以下内容放在一起:
angular.module('myApp')
.config(function ($httpProvider) {
$httpProvider.responseInterceptors.push('loadingInterceptor');
var loadingFunction = function (data, headersGetter) {
$rootScope.loading = true
return data;
};
$httpProvider.defaults.transformRequest.push(loadingFunction);
})
.factory('loadingInterceptor', function ($q, $window, $rootScope) {
return function (promise) {
return promise.then(function (response) {
$rootScope.loading = false;
return response;
}, function (response) {
$rootScope.loading = false;
return $q.reject(response);
});
};
});
Run Code Online (Sandbox Code Playgroud)
但是我无法注入$rootScope配置块,所以$rootScope.loading当HTTP请求开始时我无法设置变量.
我在这里错过了什么吗?我该怎么做?
有没有一种简单的方法来列出已在Ruby类中设置的访问器/阅读器?
class Test
attr_reader :one, :two
def initialize
# Do something
end
def three
end
end
Test.new
=> [one,two]
Run Code Online (Sandbox Code Playgroud)
我真正想要做的是允许初始化接受具有任意数量属性的哈希,但只提交已经定义了读者的哈希.就像是:
def initialize(opts)
opts.delete_if{|opt,val| not the_list_of_readers.include?(opt)}.each do |opt,val|
eval("@#{opt} = \"#{val}\"")
end
end
Run Code Online (Sandbox Code Playgroud)
还有其他建议吗?
我有一个我需要执行的任务,do_stuff(opts)每个需要大约1个,即使其中1到10个并行运行.我需要在最后收集每个操作的结果数组.
如果我有30个东西做,我将如何有效使用线程来排队了do_stuff(opts)所以不超过10同时运行操作,但结果的排列没有给出/印刷/等等,直到所有(30)任务已经完成?
我通常至少有一些代码试图说明我的意思,但是使用线程我有点亏本!提前致谢
我正在寻找我需要放入 jQuery.bind函数的 Javascript 事件,以便在从<select>元素中进行选择时触发该函数。
目前我正在使用,.bind('change',function() { ...})但我需要在再次选择所选选项时触发事件。
有什么建议?
我不熟悉active_support,所以请耐心等待!
Fox的库允许通过谷歌的API搜索,但它需要积极的支持.我似乎无法让它工作!有任何想法吗?
require 'rubygems'
require 'active_support'
require 'google_search'
p GoogleSearch.web :q => "Hello World!"
Run Code Online (Sandbox Code Playgroud)
给我:
NoMethodError: undefined method ‘cattr_accessor’ for GoogleSearch:Class
Run Code Online (Sandbox Code Playgroud)
我有什么想法我做错了吗?
(大编辑,我在那里得到了一部分...)我一直在乱砍,我想出了一个方法来指定在读取属性之前需要完成的事情:
class Class
def attr_reader(*params)
if block_given?
params.each do |sym|
define_method(sym) do
yield
self.instance_variable_get("@#{sym}")
end
end
else
params.each do |sym|
attr sym
end
end
end
end
class Test
attr_reader :normal
attr_reader(:jp,:nope) { changethings if @nope.nil? }
def initialize
@normal = "Normal"
@jp = "JP"
@done = false
end
def changethings
p "doing"
@jp = "Haha!"
@nope = "poop"
end
end
j = Test.new
p j.normal
p j.jp
Run Code Online (Sandbox Code Playgroud)
但是changethings没有被认为是一种方法 - 任何人都有任何想法?
我对 Node.js 还很陌生,所以这可能是一个基本的理解问题,但是ECONNREFUSED当我认为我不应该这样做时,我从超级代理 http 请求中得到了:
$ curl http://localhost:5000/
{"you": "looking good"}
$ node
> var request = require("superagent");
> var req = request.get("http://localhost:5000/").on('error', function (err) {
console.log("There's an emergency is going on.", err)
}).end(function (data) {
console.log("All is well", data.body)
});
There's an emergency is going on. { [Error: connect ECONNREFUSED]
code: 'ECONNREFUSED',
errno: 'ECONNREFUSED',
syscall: 'connect' }
Run Code Online (Sandbox Code Playgroud)
我做了什么假设打破了这一点?我实际上正在编写同构 JavaScript 并且完全相同的代码使浏览器上的 http 查询工作正常!