小编Tim*_*mer的帖子

编写灵活导入器模块的最佳方法

用户可以从其他网站导入他的数据.他需要做的只是在国外网站上输入他的用户名,我们将获取所有图片并将其保存到自己的图库中.一些图片需要使用rMagick(旋转,水印)进行转换,这取决于导入器(取决于用户选择从哪个网站导入数据)

我们正在讨论最性感和最灵活的方式.我们正在使用carrierwave,但是如果它更适合我们,我们将改为回形针.

进口商结构

当前结构看起来像(它的大致伪代码)

module Importer
  class Website1
    def grab_pictures
    end
  end

  class Website2
    def grab_pictures
    end
  end
end

class ImporterJob        
  def perform(user, type, foreign_username)
    pictures = Importer::type.grab_pictures(foreign_username)

    pictures.each do |picture|
      user.pictures.create picture 
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

我们为这个决定而斗争,这是进口商的最佳回报.

解决方法1:

导入器返回一个包含URL ["http:// ...","http:// ...","http:// ..."] 的字符串数组.我们可以轻松地循环并告诉carrierwave/paperclip remote_download图像.之后,如果需要,我们将运行处理器来转换图片.

 def get_picture_urls username
  pictures = []
  page = get_html(username)
  page.scan(/\/p\/\d{4}-\d{2}\/#{username}\/[\w\d]{32}-thumb.jpg/).each do |path|
    pictures << path
  end
  pictures.uniq.collect{|x| "http://www.somewebsite.com/#{x.gsub(/medium|thumb/, "big")}"}
end
Run Code Online (Sandbox Code Playgroud)

这实际上返回一个数组["url_to_image","url_to_image","url_to_image"]

然后在Picture.after_create中,我们调用一些东西来删除该Image上的Watermark.

溶液2:

grab_pictures正在将每张图片下载到tempfile并对其进行转换.它将返回一个tempfiles数组 [tempfile,tempfile,tempfile]

代码是:

def read_pictures username
  pictures = [] …
Run Code Online (Sandbox Code Playgroud)

ruby ruby-on-rails

15
推荐指数
1
解决办法
225
查看次数

数字海洋上的自动调查工作者

我有3个Web服务器.DB,WebWorker.工人整天都在处理sidekiq流程.

一旦队列超过100,000个工作岗位,我想拥有第二个工人实例,并且我正在努力思考如何做到这一点.(如果队列超过300.000,我需要3名工人,一次又一次).

  • Worker拍了拍快照.
  • 通过Digital-Ocean :: API我将基于该图像创建一个新实例.
  • 实例启动后,需要从Git-Repository更新代码
  • 我需要告诉数据库服务器允许它从这个实例IP接收连接

  • 一旦队列低于20.000,我就可以杀死我的实例.

这是正确的做法还是有更好的方法?我错过了什么吗?

附加问题:

DB我只有MySQL和Redis的.没有红宝石或其他任何东西.所以也没有铁轨运行.如果我worker决定创建另一个worker,那么新的worker需要访问mysql.似乎无法从远程计算机创建一些访问权限,它看起来我需要从数据库服务器创建访问权限.

mysql> show grants;
+-----------------------------------------------------------------------------------------+
| Grants for rails@162.243.10.147                                                         |
+-----------------------------------------------------------------------------------------+
| GRANT ALL PRIVILEGES ON *.* TO 'rails'@'162.243.10.147' IDENTIFIED BY PASSWORD <secret> |
| GRANT ALL PRIVILEGES ON `followrado`.* TO 'rails'@'162.243.10.147'                      |
+-----------------------------------------------------------------------------------------+
2 rows in set (0.00 sec)

mysql> CREATE USER 'rails'@'162.243.243.127' IDENTIFIED BY 'swag';
ERROR 1227 (42000): Access denied; you need (at least one …
Run Code Online (Sandbox Code Playgroud)

digital-ocean

10
推荐指数
1
解决办法
183
查看次数

观察div doenst中的滚动为未来事件工作

不,这不是重复的.对于各种事件,这是有效的 - 滚动除外!

我们正在弹出聊天窗口,我们需要观察那些滚动事件.

这很有效

$(".chat-window").scroll(function() {
    var scroll = $(this).scrollTop();
    console.log(scroll);
})
Run Code Online (Sandbox Code Playgroud)

OBV.在聊天窗口已经弹出后,如果我将它扔进我的控制台,它就可以工作了.

但我们需要它用于未来的元素.这个解决方案不起作用

这项工作非常重要

$(document).on("scroll", ".chat-window", function(event) {
    var scroll = $(this).scrollTop();
    console.log(scroll);
});
Run Code Online (Sandbox Code Playgroud)

"不起作用"我的意思是该功能未被触发.

是我还是jquery中的常见错误?我无法看到狡猾的陈词滥调.

jquery

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

更改Active_Admin资源的URL | 如何iverwrite AA路由?

我想将资源的路径从"/ partner_programms"更改为"/ programmangebot".

有没有办法用active_admin做到这一点,而没有放入我自己的routes.rb路由?

ActiveAdmin做:

       admin_categories GET        /admin/categories(.:format)                {:action=>"index", :controller=>"admin/categories"}
                    POST       /admin/categories(.:format)                {:action=>"create", :controller=>"admin/categories"}
 new_admin_category GET        /admin/categories/new(.:format)            {:action=>"new", :controller=>"admin/categories"}
edit_admin_category GET        /admin/categories/:id/edit(.:format)       {:action=>"edit", :controller=>"admin/categories"}
     admin_category GET        /admin/categories/:id(.:format)            {:action=>"show", :controller=>"admin/categories"}
                    PUT        /admin/categories/:id(.:format)            {:action=>"update", :controller=>"admin/categories"}
                    DELETE     /admin/categories/:id(.:format)            {:action=>"destroy", :controller=>"admin/categories"}
Run Code Online (Sandbox Code Playgroud)

当我做

#routes.rb
namespace :admin do
  resources :categories, :path=>"Kategorien"
end
Run Code Online (Sandbox Code Playgroud)

我得到了未命名的路线

               admin_categories GET        /admin/categories(.:format)                {:action=>"index", :controller=>"admin/categories"}
                            POST       /admin/categories(.:format)                {:action=>"create", :controller=>"admin/categories"}
         new_admin_category GET        /admin/categories/new(.:format)            {:action=>"new", :controller=>"admin/categories"}
        edit_admin_category GET        /admin/categories/:id/edit(.:format)       {:action=>"edit", :controller=>"admin/categories"}
             admin_category GET        /admin/categories/:id(.:format)            {:action=>"show", :controller=>"admin/categories"}
                            PUT        /admin/categories/:id(.:format)            {:action=>"update", :controller=>"admin/categories"}
                            DELETE     /admin/categories/:id(.:format)            {:action=>"destroy", :controller=>"admin/categories"}
                            GET …
Run Code Online (Sandbox Code Playgroud)

ruby-on-rails activeadmin

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

跳过结账步骤但要进行关联

我尝试修改我的CheckoutSteps.我们的客户无法选择送货或付款,因为所有订单都是相同的.(运费为5欧元,订单超过100欧元,然后免费).付款总是Eruopean BankTransfer(我们注意到订单中的客户 - 电子邮件).

所以我从我的订单中删除了州":delivery".跳过该步骤但没有对运输的分配.

我很难在Controller中自动分配它.

我看到正常的assigment是nested_attribute但我很难自己做这些关联.我试图调试控制器和模型,但我找不到正确的关联,并找到一种手动设置它们的方法.参数是

"order"=>{"shipments_attributes"=>{"0"=>{"selected_shipping_rate_id"=>"16", "id"=>"20"}}},
Run Code Online (Sandbox Code Playgroud)

但我找不到任何我可以自己进行调整的代码.如果我们进入结账流程,

Spree::Order.last.shipments
=> []
Run Code Online (Sandbox Code Playgroud)

但是一旦我们进入"交付"页面

Spree::Order.last.shipments
 => #<ActiveRecord::Associations::CollectionProxy [#<Spree::Shipment id: 28, tracking: nil, number: "H43150550345", cost: #<BigDecimal:ff44afc,'0.0',9(18)>, .............
Run Code Online (Sandbox Code Playgroud)

因此运费为0.0

Spree::Order.last.shipments.first.cost.to_f => 0
Run Code Online (Sandbox Code Playgroud)

但是当我们在网页上选择运送方式时,我的运费正确计算.

Spree::Order.last.shipments.first.cost.to_f => 5.0
Run Code Online (Sandbox Code Playgroud)

所以我的问题是,如何在没有user_interaction的情况下以编程方式进行此行为?

我不知道什么事情发生,文档没有帮助.谁能帮我吗?

//编辑

使用了一些模型函数,找到了create_proposed_shipments和shipment.update_amounts.那是"正确的方式"吗?不能让它工作

checkout_flow do
    go_to_state :address
    #go_to_state :delivery #kicked out
    go_to_state :payment, if: ->(order) { 
      order.create_proposed_shipments #create the shipping
      order.shipments.first.update_amounts #"accept" the shipping

      order.payment_required?      
    }
Run Code Online (Sandbox Code Playgroud)

ruby-on-rails spree ruby-on-rails-4

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

Sidekiq和单个队列的并发

我有 3 个队列正在运行

User
Follower
Default
Run Code Online (Sandbox Code Playgroud)

用户可以导入他的数据,然后由User队列完成。这实际上创建了大量的关注者(多达数百万),并且每个人都有一个 after_create 来在队列中更新自己Follower

这里的问题是,50 个用户现在可以创建他们的导入,但我只想同时完成 1 个导入。先进先出 - 而Follower-Queue应该仍然与 100 名工人同时工作。示例:1 个用户导入 500.000 个关注者。那么下一个用户导入500万。接下来导入 400。同时加载用户 1 的关注者。

有可能吗?

我的 YAML 看起来像这样

:queues:
  - user
  - follower
  - default
Run Code Online (Sandbox Code Playgroud)

文档现在告诉我,用户队列的优先级很高。但如何判断该队列中只有 1 个作业同时完成?

ruby-on-rails sidekiq ruby-on-rails-4

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

下拉预选择而不激发onchange

这是预选我的.item.active.selected但不幸的是它也会激发了onChange.还有另外一种方法吗?

$(function() {
  $.each($(".ui.dropdown"), function(i, dropdown) {
    selected_value = $(dropdown).find(".item.selected").data("value");
    $(dropdown).dropdown("set selected", selected_value);
  });

});
Run Code Online (Sandbox Code Playgroud)

semantic-ui

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

Ruby未定义的方法`+'代表nil:NilClass

我是红宝石的初学者,但我无法摆脱这个问题,当我运行代码时,我得到这些,这一切都运行良好,直到结束:

输入文本:一切顺利,直到

INPUT SUBTEXT:ll

TEXT:这一切都运行良好,直到SUBTEXT:ll

输出:4 15

undefined方法+' for nil:NilClass (repl):18:in初始化'

   puts "\nINPUT TEXT:"
    @text =  gets.chomp

puts "\nINPUT SUBTEXT:" 
    @subtext = gets.chomp

    puts "\nTEXT: " + @text
    puts "SUBTEXT: " + @subtext
    puts "\n"
    i = @text.index (@subtext)

    puts "OUTPUT:"

    while i != -1
            puts  i.to_s + ' '
            i = @text.index @subtext, i+1
    end
Run Code Online (Sandbox Code Playgroud)

ruby null

-2
推荐指数
1
解决办法
136
查看次数