0

Rails Cからロードしようとしているコードのサンプルを次に示します(libフォルダー内-ファイルdata2.jsonもlibディレクトリ内にあります)

$LOAD_PATH.unshift(File.expand_path(".", File.dirname(__FILE__)))
$LOAD_PATH.unshift(File.expand_path("./lib", File.dirname(__FILE__)))

require 'company_gem_class'

class LoadJson

  def go
   File.open(Rails.root, 'lib', 'file.json') do |f|
      f.each_line do |line|
        this_line = JSON.parse(line)
        hash_parser = CompanyGemClass.new(line)
        c = Company.new
        c.followers = hash_parser.followers
        c.company_name = hash_parser.company_name
        c.date_joined = hash_parser.date_joined
        ...
        c.save
      end
    end
 ...
 end

Railsコンソールから直接、単一の(Company)クラスを介してすべての生データをロードする計画でした/現在です。多くの「jsonファイルが存在しません」(Ennooent::path/to/file.jsonが存在しません)を取得しています。

lib/assets フォルダーと lib フォルダーに入れてみましたが、まだ成功していません。これらの json->ruby オブジェクトを db に一括アップロードするこのタスクをどのように行うことができますか?

^^json gem はバンドルインストール済みです。^^json ファイルは 1 行に 1 つのハッシュなので、このようにしました

4

1 に答える 1

1
  1. 私はあなたが知っていると確信しています(ただし、あなたの質問からは完全には明らかではありませんでした)それは何にもFile.open使用LOAD_PATHされません。したがって、何を入れてもLOAD_PATH、動作には影響しませんFile.open。ファイルの検索LOAD_PATH方法のみを変更します。require

  2. Rails では、すべてのファイル操作でRails.rootベース パスを使用する必要があります。Rails で作業する場合、現在の作業ディレクトリが特定のものであることに依存することはできません。

    したがって、LOAD_PATH変更は次のようにして行う必要があります。

    $LOAD_PATH.unshift(File.join(Rails.root, 'my', 'uber', 'lib'))
    
  3. File.open(1) と (2) のため -最も信頼できる方法でファイルを開く場合は、次を使用しRails.rootます。

    File.open(File.join(Rails.root, 'path', 'to', 'file.json'))
    

    またはあなたの場合:

    File.open(File.join(Rails.root, 'lib', 'assets', 'file.json'))
    
  4. In Railslibは、デフォルトですでにあなたの中にありLOAD_PATHます。したがって、個別に追加する必要はありません。

于 2012-07-21T03:00:41.447 に答える