Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails fastercsv的Rails 3服务器启动问题_Ruby On Rails_Ruby_Ruby On Rails 3 - Fatal编程技术网

Ruby on rails fastercsv的Rails 3服务器启动问题

Ruby on rails fastercsv的Rails 3服务器启动问题,ruby-on-rails,ruby,ruby-on-rails-3,Ruby On Rails,Ruby,Ruby On Rails 3,我有一个rails 2.3.5应用程序正在升级到rails 3。我做了升级和启动rails服务器时需要做的每一件事 rails server 它给了我这个 Please switch to Ruby 1.9's standard CSV library. It's FasterCSV plus support for Ruby 1.9's m17n encoding engine. 我正在使用ruby-1.9.2-p0,并且安装了fastercsv(1.5.3)gem。在puts语句的帮助

我有一个rails 2.3.5应用程序正在升级到rails 3。我做了升级和启动rails服务器时需要做的每一件事

rails server
它给了我这个

Please switch to Ruby 1.9's standard CSV library.  It's FasterCSV plus
support for Ruby 1.9's m17n encoding engine.
我正在使用
ruby-1.9.2-p0
,并且安装了
fastercsv(1.5.3)gem
。在puts语句的帮助下,我能够跟踪错误发生的位置。我发现执行在这一行停止

Bundler.require(:default, Rails.env) if defined?(Bundler)

在application.rb文件中。我尝试了很多事情,但都没有成功。。请帮忙

从应用程序中的GEM文件中删除fasterCSV。Bundler正在尝试要求FasterCSV,因为您在gem文件中指定了它。

对于1.9,您不再需要/可以使用FasterCSV gem,因为它捆绑在std库中。 现在,您只需执行以下操作:

require 'csv'
CSV.open("temp.csv", "w") do |csv|
  csv << ["line1row1", "line1row2"]
  csv << ["line2row1", "line2row2"]
  # ...
end
需要“csv”
CSV.open(“临时CSV”,“w”)do | CSV|

csv也看看这里

这是我找到的解决方案:

require 'fastercsv'
require 'csv'

class ImportFileToAssetsWithFasterCsv < ActiveRecord::Migration
  def self.up
    if CSV.const_defined? :Reader
    csv = FasterCSV
    else
    csv = CSV
    end

    file = 'db/staticfiles/DB-good-rightnames-forimport.csv'
    csv.foreach(file) do |row|
      Asset.create!(:country => row[0], :city => row[1], :latlong => row[2], :XX => row[3], :DEC => row[4], :point_name => row[5], :system_type => row[6], :system_brand => row[7], :function => row[8], :operator_name => row[9], :operator_brand => row[10], :parent_company => row[11], :app => "WWW", :language => "en", :source => "XXX", :Z_name => "International", :pref_format => "")
    end
  end

  def self.down
    IspcAsset.destroy_all()
  end
end
需要'fastercsv'
需要“csv”
使用FastERCSV行[0],:city=>行[1],:latlong=>行[2],:XX=>行[3],:DEC=>行[4],:point\u name=>行[5],:system\u type=>行[6],:system\u brand=>行[7],:function=>行[8],:operator\u name=>行[9],:operator\u brand=>行[10],:operator\u brand=>行[11],:parent\u company=>行[11],:app=>“WWW],:language=>,:language=>行[11],:en],:source=>,:pref_格式=>“”)
结束
结束
def自动关闭
IspcAsset.destroy_all()
结束
结束

如果在循环或代码中使用FasterCsv,只需将其更改为Csv即可,对我有效。 从gem文件中删除gem“fastercsv”。 只需在控制器中编写代码,无需在配置的某个地方添加其他代码

这是错误代码的示例

class HomeController < ApplicationController
    require 'fastercsv'


def download_csv
    @invitation = Invitation.find(params[:id])
    @activities = Version.where("created_at >= ?", @invitation.created_at)
    if params[:export]

      csv_string = FasterCSV.generate do |csv|
      # header row
            csv << ["Date", "Event", "Details"]

            @activities.each do |act|
              csv << [act.created_at.strftime("%d-%m-%Y"), act.event, act.item_id]

            end
      end   
        timestamp = Time.now.strftime('%Y-%m-%d_%H:%M:%S')
        send_data csv_string,
            :type => 'text/csv; charset=iso-8859-1; header=present',
            :disposition => "attachment; filename=goal_history_#{timestamp}.csv"
    end
  end
class HomeController=?”,@invitation.created\u-at)
如果参数[:导出]
csv|U string=FasterCSV.generate do|csv|
#标题行
csv“附件;文件名=goal_history_35;{timestamp}.csv”
结束
结束
通过将单词FasterCsv更改为Csv进行了更正,效果良好。如下

class HomeController < ApplicationController
    require 'csv'


def download_csv
    @invitation = Invitation.find(params[:id])
    @activities = Version.where("created_at >= ?", @invitation.created_at)
    if params[:export]

      csv_string = CSV.generate do |csv|
      # header row
            csv << ["Date", "Event", "Details"]

            @activities.each do |act|
              csv << [act.created_at.strftime("%d-%m-%Y"), act.event, act.item_id]

            end
      end   
        timestamp = Time.now.strftime('%Y-%m-%d_%H:%M:%S')
        send_data csv_string,
            :type => 'text/csv; charset=iso-8859-1; header=present',
            :disposition => "attachment; filename=goal_history_#{timestamp}.csv"
    end
  end
class HomeController=?”,@invitation.created\u-at)
如果参数[:导出]
csv_string=csv.generate do|csv|
#标题行
csv“附件;文件名=goal_history_35;{timestamp}.csv”
结束
结束

我在application.rb:54:in'require':没有这样的文件要加载--fastercsv(LoadError)实际上我在application.rb中有一组require语句,用于应用程序中使用的gems,其中一个是require'fastercsv',在第54行。你不应该在application.rb中这样放置gems的requires语句。使用bundler为您的项目配置所有必需的gem,因为这是在项目中包含gem的新的实际方法。而且,现在ruby 1.9的标准配置似乎是fastercsv,您甚至可能不需要fastercsv,甚至不需要将其作为gem包含在bundler中?对Bundler.require函数实际上是为了遍历gem文件中的gem列表,并要求它们进入您的项目中。const_missing':请切换到Ruby 1.9的标准CSV库。它是对Ruby 1.9的m17n编码引擎的FasterCSV支持。(未实现错误)