6

Railsアプリ、特にcarrierwaveを使用するアプリにデータをシードしようとしています。私はstackoverflowでここにある2つの素晴らしいソリューションの組み合わせを使用しています!

シード用のrakeタスク+ymlファイル

キャリアウェーブのシード

私は次のものを持っています:

namespace :db do
  desc "This loads the development data."
  task :seed => :environment do
    require 'active_record/fixtures'
    Dir.glob(RAILS_ROOT + '/db/fixtures/*.yml').each do |file|
      base_name = File.basename(file, '.*')
      puts "Loading #{base_name}..."
      ActiveRecord::Fixtures.create_fixtures('db/fixtures', base_name)
    end
    #add in the image file for the default data
    for item in Item.find(:all)
      item.filename.store!(File.open(File.join(Rails.root, "app/assets/images/objects/" + item.name.gsub(/ /,'').downcase + ".svg")))
      item.save!
    end
  end

  desc "This drops the db, builds the db, and seeds the data."
  task :reseed => [:environment, 'db:reset', 'db:seed']
end

ただし、herokuでは、次のようなパスに関するエラーが発生し続けます

rake aborted!
No such file or directory - app/assets/images/objects/house.svg

私はラインのいくつかのバージョンを試しました:

item.filename.store!(File.open(File.join(Rails.root, "app/assets/images/objects/" + item.name.gsub(/ /,'').downcase + ".svg")))

基本的に、File.joinと連結を使用して変更し、上記で正常に機能しているように見えるRAILS_ROOTを使用しようとしましたが、常にこのエラーが発生するようです。

4

1 に答える 1

3

ファイルを作成していますか、app/assets/images/objects/それともデータをそこに置いていますか?そのディレクトリはあなたのgitリポジトリに存在しますか?heroku run ls app/assets/images/objects/コマンドラインから実行すると、ディレクトリがherokuに存在するかどうかを確認できます。

herokuで実行されているすべてのアプリは、一時的なファイルシステムを使用します。

各dynoは、最後にデプロイされたコードの新しいコピーを使用して、独自のエフェメラルファイルシステムを取得します。dynoの存続期間中、実行中のプロセスはファイルシステムを一時的なスクラッチパッドとして使用できますが、書き込まれたファイルは他のdynoのプロセスに表示されず、書き込まれたファイルはdynoが停止または再起動された瞬間に破棄されます

つまり、gitリポジトリ内で呼び出されるディレクトリにファイルがあるapp/assets/images/objects/か、プログラムのデプロイ後にプログラムでそれらのファイルを作成しない限り、そのようなファイルやその名前のディレクトリは実際には存在しない可能性があります。

于 2012-09-07T03:58:13.227 に答える