carrierwaveでユーザーDBに保存されているファイルをアップロードしています。ファイルを更新した後、そのファイルを他の場所にコピーするアクションを呼び出す必要があります。私の問題は、私がそのアクションを呼び出すと、私はこのエラーが(Errno::EISDIR - Is a directory @ rb_sysopen)
ですが、作成されたファイルを認識しないためですが、私がファイルを更新していればDBにあります(そして、updateではなく、うまくいきますが、ユーザーがアップロードしたときにのみファイルをコピーします)。ruby:ユーザーの更新後にエラーが発生しました
これは私の二つの作用、更新あり、および更新を実行した後COPY_FILE呼び出す:
def copy_file
require "fileutils"
my_dir = Dir['./public/'+current_user.personal_file_url.to_s]
my_dir.each do |filename|
# name = File.basename('data', '.xml')[0,4]
dest_folder = "./public/files/"
FileUtils.cp(filename, dest_folder + "data.xml")
# File.rename(filename, dest_folder + "/" + "data" + File.extname(filename))
end
bat_file
#redirect_to personal_performance_path
end
# PATCH/PUT /users/1
# PATCH/PUT /users/1.json
def update #upload personal file
respond_to do |format|
if @user.update(user_params)
format.html { redirect_to :back, notice: 'File was sucessfully uploaded!' }
format.json { render :show, status: :ok, location: @user }
# copy_file #make a copy of the uploaded file in public/files/data.xml for running in the bat file
else
format.html { render :edit }
format.json { render json: @user.errors, status: :unprocessable_entity }
end
end
copy_file
end
なぜ、あなたは 'tempfile'にコピーして、あなたが望むファイルにTempfileをコピーして、それを削除するために一時ファイルを' .unlink'しないのですか?これはパフォーマンスを節約し、エラーも取り除きます。そのエラーはそのファイルがファイルではないことを意味します。どのような理由であれ、Rubyはあなたのファイルをディレクトリとして読み込み、それをコピーしません。 'tempfile'ソリューションを試して、それがどのように動作するかを見てください。また、 'FileUtils.cp'は実際には何もしません。http://ruby-doc.org/stdlib-1.9.3/libdoc/fileutils/rdoc/FileUtils.html – 13aal
私がそれを呼び出すと、この動作は機能しています。ユーザーが更新された後の他の場所から – terrorista
どうすればその一時ファイルの方法を行うことができますか? – terrorista