小编Sou*_*oup的帖子

如何使用ruby和unix服务器截取网页截图?

我正在尝试以编程方式创建大量网页的缩略图,这些网页托管在我自己的基于ruby/rails的网站上.

我希望能够编写一个独立的ruby代码,看起来像这样:

require 'awesome-screenshot-maker'

items.each do |id|
  url = "http://foo.com/bar/#{id}"
  shooter = AwesomeScreenshotMaker.new(0.2) # thumbnails are 20% of original
  shooter.capture(url, "/images/thumbnail-#{id}.png")
end
Run Code Online (Sandbox Code Playgroud)

我需要在Linux,Solaris和Mac OS X上构建相当容易的awesome-screenshot-maker库(及其依赖项).理想情况下,它将使用单个"gem install"命令进行安装.

我花了一个下午探索各种选项,包括Moz snap shooter,webkit2pngrbwebkitgtk.它们都在正确的区域,但似乎都不适用于所有三个平台.

如果我愿意从我的rails应用程序(而不是网页)输出PDF,RMagick看起来像是一个可能的选项,但这让我觉得很糟糕.在Mac OS X上运行RMagic和imagemagick也很费力.

是否存在可以在三个平台上轻松设置的库?

ruby unix gtk screenshot rmagick

8
推荐指数
1
解决办法
9680
查看次数

检测Elixir/OTP主管儿童产卵和终止

我正在Elixir建立一个工作队列作为学术练习.目前,我的工作人员在创建队列时必须手动注册队列(请参阅参考资料MyQuestion.Worker.start_link).

我希望我的主管在创建/重新启动时向队列中注册可用的工作人员,因为这似乎有助于测试工作人员并最大限度地减少耦合.

有没有办法做我在下面的代码中描述的内容MyQuestion.Supervisor

defmodule MyQuestion.Supervisor do
  use Supervisor

  def start_link do
    supervisor = Supervisor.start_link(__MODULE__, :ok)
  end

  def init(:ok) do
    children = [
      worker(MyQuestion.JobQueue, []),
      worker(MyQuestion.Worker, [], id: :worker_0),
      worker(MyQuestion.Worker, [], id: :worker_1)]
    supervise(children, strategy: :rest_for_one)
  end

  # LOOKING FOR SOMETHING LIKE THIS
  # on worker spawn, I want to add the worker to the queue
  def child_spawned(pid, {MyQuestion.Worker, _, _}) do
    # add worker to queue
    MyQuestion.JobQueue.add_new_worker(pid)
  end

  # LOOKING FOR SOMETHING LIKE THIS
  # I …
Run Code Online (Sandbox Code Playgroud)

elixir erlang-otp

7
推荐指数
1
解决办法
982
查看次数

Rails脚手架多元化对于"咖啡馆"是不正确的

我想创建一个cafe和一个cave控制器.

当我尝试cafe通过命令创建我的使用rails脚手架

rails g scaffold cafe name:string

它将"咖啡馆"的复数形式推导为"洞穴",这意味着我不能制作我的caves控制器,因为名称已被使用.

如何使轨道使用正确的复数?

ruby ruby-on-rails ruby-on-rails-3

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

如何让fitBounds了解自定义控件

我的谷歌地图左侧有一个大型(300*500px)自定义控件.我把我的标记聚集在一起.当用户点击标记时,我想缩放地图以显示该群集中的标记.

问题是:

当我得到我的标记集合的边界时map.fitBounds(collection_bounds),我最终在我的大型控件下面有标记.有没有办法阻止fitBounds使用整个视口?

我试图得到LatLng我的西南方界点,即转化为像素,移动是300像素的,然后是转换一个LatLng作为新的西南边界点使用.这不起作用,因为计算是在缩放之前完成,所以300px的移位最终太多了...我想写自己的fitBounds,但我遇到了同样的问题,因为它是在缩放之前完成的.

google-maps google-maps-api-3

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

从模型访问Sinatra设置

我有一个模块化的Sinatra应用程序.我在配置块中设置了一些自定义变量,并希望在我的模型中访问这些设置.

问题是,NoMethodError当我尝试访问我的自定义设置时,我得到了一个MyModel.标准设置似乎仍然可以正常工作.我怎样才能做到这一点?

# app.rb
require_relative 'models/document'

class App < Sinatra::Base
  configure do
    set :resource_path, '/xfiles/i_want_to_believe'
  end

  get '/' do
    @model = MyModel.new
    haml :index
  end
end

# models/my_model.rb
class MyModel
  def initialize
    do_it
  end
  def do_it
    ...
    settings.resource_path # no method error
    ...
    settings.root # works fine
  end
end
Run Code Online (Sandbox Code Playgroud)

ruby sinatra

4
推荐指数
2
解决办法
3840
查看次数

命名空间API和资源路由

我在版本化命名空间中有我的API,

namespace :api do
  namespace :v1 do
    resources :posts
  end
end
Run Code Online (Sandbox Code Playgroud)

但是现在当我有我的控制器时,redirect_to @post我得到一个路由错误,Post因为没有为它定义路由.

def create
  @post = Post.new(params[:post])
  if @post.save
    redirect_to @post
  else
    # ...
  end
end

undefined method `post_url' for #<Api::V1::PostsController:0x007fb9c5fc8858>
Run Code Online (Sandbox Code Playgroud)

我知道我可以更新我的控制器以重定向到指定的路由,而不是世界末日:

def create
  @post = Post.new(params[:post])
  if @post.save
    redirect_to api_v1_post_url(@post)
    # or redirect_to [:api, :v1, @post]
  else
    # ...
  end
end
Run Code Online (Sandbox Code Playgroud)

有没有办法让redirect_to @post自动检测到它应该是正确的api版本(因此导轨可以使用api_v1_post_url)?我知道我可以覆盖,redirect_to但实际上我想要一个名称空间感知url_for,也许rails为此提供了一些钩子?

ruby-on-rails rails-routing ruby-on-rails-3.2

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

只有当fa()成功时,最常用的方法是调用fb()

我有两个函数,我想运行step_1,然后运行step_2只有step_1好的.什么是构建此代码的最功能惯用方式?嵌套case语句看起来很难看,但我不知道除了if更糟糕的情况之外还有什么其他的做法.

defmodule Test do
  def step_1 do
    IO.puts "Step 1"
    :error
  end

  def step_2 do
    IO.puts "Step 2"
    :ok
  end

  def do_something_case do
    case step_1 do
      :ok ->
        case step_2 do
          :ok -> {:ok}
          :error -> {:error, :step_2}
        end
      :error -> {:error, :step_1}
    end
  end

  def do_something_if do
    r1 = step_1
    if r1 == :ok
      r2 = step_2
      if r2 == :ok
        :ok
      else
        {:error, :step_2}
      end
    else
      {:error, :step_1} …
Run Code Online (Sandbox Code Playgroud)

functional-programming elixir

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

将模板化基类的子类添加到没有超基类的容器中?

我正在尝试创建一个矢量(或任何真正的STL容器),它可以容纳一组作为一种特定类型的子类的各种对象.问题是我的基类是模板化的.

据我所知,我必须创建一个接口/抽象超级基类(不确定首选的C++术语是什么).我不想这样做,只是使用我的(模板化的)抽象基类.下面是一些示例代码.

基本上,有没有办法不要求WidgetInterface?那么告诉编译器忽略模板要求?如果我必须WidgetInterface,我会以正确的方式与以下?

#include <vector>
#include "stdio.h"

enum SomeEnum{
    LOW = 0,
    HIGH = 112358
};

// Would like to remove this WidgetInterface
class WidgetInterface{
public:
    // have to define this so we can call it while iterating
    // (would remove from Widget if ended up using this SuperWidget
    // non-template baseclass method)
    virtual void method() = 0; 
};

template <class TDataType>
class AbstractWidget : public WidgetInterface{
public:
    TDataType mData;
    virtual void method() = 0;
    // …
Run Code Online (Sandbox Code Playgroud)

c++ templates stl

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