小编JP.*_*JP.的帖子

Sinatra应用程序的宝石

我有一个我创建的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)

ruby gem sinatra

6
推荐指数
1
解决办法
1129
查看次数

Sinatra服务器运行后执行代码

我附上了一个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)

有任何想法吗?

ruby sinatra

6
推荐指数
1
解决办法
4091
查看次数

在httpIntercept上设置rootScope变量

我希望能够设置一个AngularJS http拦截器,它将设置$rootScope.loadingtruefalse取决于当前是否正在进行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请求开始时我无法设置变量.

我在这里错过了什么吗?我该怎么做?

angularjs

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

从任意哈希初始化Ruby类,但只有具有匹配访问器的键

有没有一种简单的方法来列出已在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)

还有其他建议吗?

ruby class

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

在Ruby中使用限制进行线程化

我有一个我需要执行的任务,do_stuff(opts)每个需要大约1个,即使其中1到10个并行运行.我需要在最后收集每个操作的结果数组.

如果我有30个东西做,我将如何有效使用线程来排队了do_stuff(opts)所以不超过10同时运行操作,但结果的排列没有给出/印刷/等等,直到所有(30)任务已经完成?

我通常至少有一些代码试图说明我的意思,但是使用线程我有点亏本!提前致谢

ruby queue multithreading

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

在Ruby中通过UPnP打开路由器端口

我知道应该可以与本地网络上的NAT /路由器通信,并要求通过UPnP转发端口,但我不知道任何具体细节.

我发现了一块看起来可能有用的宝石,但除此之外,我不知所措(宝石的主页似乎已经失效).

有没有人有任何指针?

ruby upnp

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

用于选择元素选择的 Javascript 事件

我正在寻找我需要放入 jQuery.bind函数的 Javascript 事件,以便在从<select>元素中进行选择时触发该函数。

目前我正在使用,.bind('change',function() { ...})但我需要在再次选择所选选项时触发事件。

有什么建议?

html javascript jquery events

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

当需要active_support时,cattr_accessor无法正常工作(在rails之外)?

我不熟悉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)

我有什么想法我做错了吗?

ruby ruby-on-rails activesupport

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

自定义attr_reader以执行属性的延迟实例化

(大编辑,我在那里得到了一部分...)我一直在乱砍,我想出了一个方法来指定在读取属性之前需要完成的事情:

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没有被认为是一种方法 - 任何人都有任何想法?

ruby accessor

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

SuperAgent + Node.js 连接被拒绝

我对 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 查询工作正常!

node.js superagent

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