我正在尝试以编程方式创建大量网页的缩略图,这些网页托管在我自己的基于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,webkit2png和rbwebkitgtk.它们都在正确的区域,但似乎都不适用于所有三个平台.
如果我愿意从我的rails应用程序(而不是网页)输出PDF,RMagick看起来像是一个可能的选项,但这让我觉得很糟糕.在Mac OS X上运行RMagic和imagemagick也很费力.
是否存在可以在三个平台上轻松设置的库?
我正在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) 我想创建一个cafe和一个cave控制器.
当我尝试cafe通过命令创建我的使用rails脚手架
rails g scaffold cafe name:string
它将"咖啡馆"的复数形式推导为"洞穴",这意味着我不能制作我的caves控制器,因为名称已被使用.
如何使轨道使用正确的复数?
我的谷歌地图左侧有一个大型(300*500px)自定义控件.我把我的标记聚集在一起.当用户点击标记时,我想缩放地图以显示该群集中的标记.
问题是:
当我得到我的标记集合的边界时map.fitBounds(collection_bounds),我最终在我的大型控件下面有标记.有没有办法阻止fitBounds使用整个视口?
我试图得到LatLng我的西南方界点,即转化为像素,移动是300像素的,然后是转换回一个LatLng作为新的西南边界点使用.这不起作用,因为计算是在缩放之前完成的,所以300px的移位最终太多了...我想写自己的fitBounds,但我遇到了同样的问题,因为它是在缩放之前完成的.
我有一个模块化的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) 我在版本化命名空间中有我的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为此提供了一些钩子?
我有两个函数,我想运行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) 我正在尝试创建一个矢量(或任何真正的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) ruby ×3
elixir ×2
c++ ×1
erlang-otp ×1
google-maps ×1
gtk ×1
rmagick ×1
screenshot ×1
sinatra ×1
stl ×1
templates ×1
unix ×1