在rails应用程序中读取大型csv文件会占用大量内存 – 减少内存消耗的策略?

我有一个rails应用程序,允许用户上传csv文件,并在delayed_job gem的帮助下安排读取多个csv文件。 问题是应用程序将其文件中的每个文件读入内存,然后写入数据库。 如果只读取其中的1个文件,但是当读取多个文件时,服务器上的RAM会变满并导致应用程序挂起。 我试图找到解决这个问题的方法。 我研究的一个解决方案是将csv文件分成更小的部分并将它们保存在服务器上,然后读取较小的文件。 看到这个链接 example: split -b 40k myfile segment 不是我的首选解决方案 有没有其他方法来解决这个问题,我没有必要打破文件。 解决方案必须是ruby代码。 谢谢,

通过其他模型收集Rails 4

我不确定如何说这个,因为我不确定这个词的正确用语是什么,但是…… 我有一个用户模型。 这个模型可以创建火车。 这样user.trains拥有他们所有的火车。 这个模型也可以创建总线,这样user.buses就拥有了所有的总线。 火车和公共汽车都可以包含货物。 user.trains.cargo和user.buses.cargo。 我如何设置它以便我可以直接询问User.cargo并从火车和公共汽车获得所有货物,而无需为每个货物拨打.cargo列表?

循环通过状态 – 范围? 的Ruby / Rails

我希望能够根据当前状态循环遍历模型。 我为我的模型创建了相当简单的状态,如下所示: models/job.rb class Job < ActiveRecord::Base has_many :events, class_name: "JobEvent" STATES = %w[bids in_progress complete canceled] delegate :bids?, :in_progress?, :complete?, :canceled?, to: :current_state def current_state (events.last.try(:state) || STATES.first).inquiry end end 和 models/job_event.rb class JobEvent < ActiveRecord::Base belongs_to :job attr_accessible :state validates_presence_of :job_id validates_inclusion_of :state, in: Order::STATES def self.with_last_state(state) order("id desc").group("job_id").having(state: state) end end 国家工作 […]

在Ruby Mysql查询中使用变量

我有一个名称存储在变量username并希望在我尝试时提取用户行信息 result = dbh.query(“SELECT * FROM maintab WHERE user = ‘#{username}'”) 我没有结果。 但是,如果我手动输入用户名,它会返回结果。 如何格式化我的查询以便我可以使用变量?

如果它们具有相同的值,则在散列数组中求和值

我在这篇文章中看到了这段代码,因为我试图根据一些标准对哈希数组中的值求和。 Rails在哈希数组中求和值 array = [ {loading: 10, avg: 15, total: 25 }, {loading: 20, avg: 20, total: 40 }, {loading: 30, avg: 25, total: 55 } ] sum = Hash.new(0) array.each_with_object(sum) do |hash, sum| hash.each { |key, value| sum[key] += value } end # => {:loading=>60, :avg=>60, :total=>120} 我正在尝试做什么,我不知道如何,如果加载和avg在这个数组中出现多次相同的值,则总和为key。 例如。 array = [ {loading: 10, […]

ActiveAdmin中的Formtastic提示问题(不需要的对象ID输出)

当我使用formtastic DSL for ActiveAdmin编辑表单时,我得到以下输出: #<#:0x00000006bd1018> Image 为什么这会从obj.inspect的结果以及如何删除这部分开始呢? 导致此错误的代码在这里: form :html => { :multipart => true } do |f| f.inputs do #… f.input :image, required: false, hint: f.template.image_tag(f.object.image.url(:medium)).html_safe #… end f.actions end

使用Ruby比较数组中的两个项目

我遇到的问题是需要使用方法比较数组中的两个元素。 我发现使用嵌套循环的逻辑很简单,但这可能不是Ru​​by的好用。 对于前者 确定数组是否有任何一对2个等于0的数字: def pairs(array) i = 0 while i < array.length y = i + 1 while y < array.length if array[i] + array[y] == 0 return true end y += 1 end i += 1 end return false end 或者,如果我想看看数组中的两个东西是否相同,我将使用相同的逻辑,除了set:if array [i] == to array [y] … 有人能为这样的问题提供更好的方法吗?

rails 5 carrierwave没有路由匹配图像

我需要一些帮助。 我使用rails 5和carrierwave上传图像。 我遇到的问题是图像被保存但不会显示,我得到一个无路由匹配GET …..我将图像存储在Rails.root的uploads文件夹中,因为我不希望它们保存在公共场所DIR。 image_uploader.rb def store_dir “uploads/#{model.user_id}/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}” end carrier_wave.rb require ‘carrierwave/orm/activerecord’ require ‘carrierwave’ CarrierWave.configure do |config| config.root = Rails.root end 这是我在日志中收到的错误: Started GET “/uploads/2/uitem/image/26/A_penrose-small.jpg” for ::1 at 2016-10-29 16:06:27 +0200 ActionController::RoutingError (No route matches [GET] “/uploads/2/uitem/image/26/A_penrose-small.jpg”): 非常感谢任何帮助,我一直在搜索,无法找到解决方案。 谢谢

mysql2 0.4.0 ruby​​ gem需要输入错误

我使用命令安装了mysql2 gem:gem install mysql2 Done installing documentation for mysql2 after 0 seconds 1 gem installed 但是当我确实require ‘mysql2’ ,我得到: LoadError: cannot load such file — mysql2/mysql2 即使gem安装成功, gem list mysql2 *** LOCAL GEMS *** mysql2 (0.4.0) 我正在使用MacOSX和ruby 2.1.5p273 有关我应该在哪里寻找的任何建议?

比较哈希数组并打印预期和实际结果

我有2个哈希数组: actual = [{“column_name”=>”NONINTERESTINCOME”, “column_data_type”=>”NUMBER”}, {“column_name”=>”NONINTERESTEXPENSE”, “column_data_type”=>”VARCHAR”}, {“column_name”=>”TRANSACTIONDATE”, “column_data_type”=>”TIMESTAMP”}, {“column_name”=>”UPDATEDATE”, “column_data_type”=>”TIMESTAMP”}] expected = [{“column_name”=>”NONINTERESTINCOME”, “column_data_type”=>”NUMBER”}, {“column_name”=>”NONINTERESTEXPENSE”, “column_data_type”=>”NUMBER”}, {“column_name”=>”TRANSACTIONDATE”, “column_data_type”=>”NUMBER”}, {“column_name”=>”UPDATEDATE”, “column_data_type”=>”TIMESTAMP”}] 我需要比较这两个哈希值,找出column_data_type不同的哈希值。 比较我们可以直接使用: diff = actual – expected 这会将输出打印为: {“column_name”=>”NONINTERESTEXPENSE”, “column_data_type”=>”VARCHAR”} {“column_name”=>”TRANSACTIONDATE”, “column_data_type”=>”TIMESTAMP”} 我的预期输出是在结果中我想打印实际和预期的数据类型,意味着实际和预期的哈希数组中缺少的`column_name’的数据类型,如: {“column_name”=>”NONINTERESTEXPENSE”, “expected_column_data_type”=>”NUMBER”, “actual_column_data_type” => “VARCHAR”} {“column_name”=>”TRANSACTIONDATE”, “expected_column_data_type”=>”NUMBER”,”actual_column_data_type” => “TIMESTAMP” }