Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Remove the cached file after storing it #125

Merged
3 commits merged into from Oct 15, 2010
Merged

Remove the cached file after storing it #125

3 commits merged into from Oct 15, 2010

Conversation

dmathieu
Copy link
Contributor

This follows issue 107.
I've done three things :

  • Don't move the file when using the file storage but copy. All the other storage engines are keeping the temporary file, I don't see any reason not to do the same when using the standard file storage.
  • Delete the temporary file after storing it (for any storage engine).
  • Add an option to deactivate the deletion of that temporary file.

@trevorturk
Copy link
Contributor

This looks right to me, but I'll defer to Jonas for the merge. I'm (still!) having trouble with the tests at the moment.

@trevorturk
Copy link
Contributor

Merged - thanks!

@trevorturk
Copy link
Contributor

dmathieu, I'm playing with this some more, and it looks like the config option doesn't work correctly. I'm not sure if this is limited to the config option you added, though. I might be doing something wrong. In any case, we should add some documentation to mount.rb.

See this issue please: http://github.com/jnicklas/carrierwave/issues#issue/150

I'd really appreciate your attention -- thank you!

@Goltergaul
Copy link

deleteting the folder where the files are in would be great too!

@trevorturk
Copy link
Contributor

Pull requests are welcome!

@dmathieu
Copy link
Contributor Author

The best way for that would be to fork, do it and make a pull request (with tests) ;)

@clyfe clyfe mentioned this pull request Jan 8, 2013
Deradon added a commit to Deradon/carrierwave that referenced this pull request Aug 16, 2015
== Problem

    Errno::EMLINK: Too many links @ dir_s_mkdir

== Full Backtrace

    /opt/rubies/ruby-2.1.5/lib/ruby/2.1.0/fileutils.rb:247 :in `mkdir`
    /opt/rubies/ruby-2.1.5/lib/ruby/2.1.0/fileutils.rb:247 :in `fu_mkdir`
    /opt/rubies/ruby-2.1.5/lib/ruby/2.1.0/fileutils.rb:224 :in `block (2 levels) in mkdir_p`
    /opt/rubies/ruby-2.1.5/lib/ruby/2.1.0/fileutils.rb:222 :in `reverse_each`
    /opt/rubies/ruby-2.1.5/lib/ruby/2.1.0/fileutils.rb:222 :in `block in mkdir_p`
    /opt/rubies/ruby-2.1.5/lib/ruby/2.1.0/fileutils.rb:208 :in `each`
    /opt/rubies/ruby-2.1.5/lib/ruby/2.1.0/fileutils.rb:208 :in `mkdir_p`
    [GEM_ROOT]/gems/carrierwave-0.9.0/lib/carrierwave/sanitized_file.rb:290 :in `mkdir!`
    [GEM_ROOT]/gems/carrierwave-0.9.0/lib/carrierwave/sanitized_file.rb:209 :in `copy_to`
    [GEM_ROOT]/gems/carrierwave-0.9.0/lib/carrierwave/uploader/cache.rb:131 :in `block in cache!`
    [GEM_ROOT]/gems/carrierwave-0.9.0/lib/carrierwave/uploader/callbacks.rb:17 :in `with_callbacks`
    [GEM_ROOT]/gems/carrierwave-0.9.0/lib/carrierwave/uploader/cache.rb:122 :in `cache!`
    [GEM_ROOT]/gems/carrierwave-0.9.0/lib/carrierwave/mount.rb:327 :in `cache`
    [GEM_ROOT]/gems/carrierwave-0.9.0/lib/carrierwave/mount.rb:179 :in `file=`
    [GEM_ROOT]/gems/carrierwave-0.9.0/lib/carrierwave/orm/activerecord.rb:38 :in `file=`

== Why

<TODO>

== Reproduce

Let's imagine a rails app with a User#avatar

    require 'tempfile'
    32001.times { User.new avatar: Tempfile.new("foo") }
    # This will create 32001 dirs within /public/uploads/tmp

== Related Pull Requests / Issues / Links

* [How to: Delete cache garbage directories](https://github.com/carrierwaveuploader/carrierwave/wiki/How-to:-Delete-cache-garbage-directories)
* [Remove the cached file after storing it carrierwaveuploader#107](carrierwaveuploader#107)
* [Remove the cached file after storing it carrierwaveuploader#125](carrierwaveuploader#125)
* [delete cache garbage dirs carrierwaveuploader#338](carrierwaveuploader#338)
* [delete cache garbage dirs issue carrierwaveuploader#338 carrierwaveuploader#346](carrierwaveuploader#346)
* [Issue 338 carrierwaveuploader#393](carrierwaveuploader#393)
* [tmp files not being deleted carrierwaveuploader#1489](carrierwaveuploader#1489)
Deradon added a commit to Deradon/carrierwave that referenced this pull request Aug 17, 2015
== Problem

    Errno::EMLINK: Too many links @ dir_s_mkdir

== Full Backtrace (carrierwave 0.9)

    /opt/rubies/ruby-2.1.5/lib/ruby/2.1.0/fileutils.rb:247 :in `mkdir`
    /opt/rubies/ruby-2.1.5/lib/ruby/2.1.0/fileutils.rb:247 :in `fu_mkdir`
    /opt/rubies/ruby-2.1.5/lib/ruby/2.1.0/fileutils.rb:224 :in `block (2 levels) in mkdir_p`
    /opt/rubies/ruby-2.1.5/lib/ruby/2.1.0/fileutils.rb:222 :in `reverse_each`
    /opt/rubies/ruby-2.1.5/lib/ruby/2.1.0/fileutils.rb:222 :in `block in mkdir_p`
    /opt/rubies/ruby-2.1.5/lib/ruby/2.1.0/fileutils.rb:208 :in `each`
    /opt/rubies/ruby-2.1.5/lib/ruby/2.1.0/fileutils.rb:208 :in `mkdir_p`
    [GEM_ROOT]/gems/carrierwave-0.9.0/lib/carrierwave/sanitized_file.rb:290 :in `mkdir!`
    [GEM_ROOT]/gems/carrierwave-0.9.0/lib/carrierwave/sanitized_file.rb:209 :in `copy_to`
    [GEM_ROOT]/gems/carrierwave-0.9.0/lib/carrierwave/uploader/cache.rb:131 :in `block in cache!`
    [GEM_ROOT]/gems/carrierwave-0.9.0/lib/carrierwave/uploader/callbacks.rb:17 :in `with_callbacks`
    [GEM_ROOT]/gems/carrierwave-0.9.0/lib/carrierwave/uploader/cache.rb:122 :in `cache!`
    [GEM_ROOT]/gems/carrierwave-0.9.0/lib/carrierwave/mount.rb:327 :in `cache`
    [GEM_ROOT]/gems/carrierwave-0.9.0/lib/carrierwave/mount.rb:179 :in `file=`
    [GEM_ROOT]/gems/carrierwave-0.9.0/lib/carrierwave/orm/activerecord.rb:38 :in `file=`

== Why

Some file systems only allow a limited number of subdirectories.
Ext3 for example only allow ~32k subdirectories.

== Reproduce

Let's imagine a rails app with a User#avatar

    require 'tempfile'
    32001.times { User.new avatar: Tempfile.new("foo") }
    # This will create 32001 dirs within /public/uploads/tmp

== Fix

Clean cache after caching failed.

== Related Pull Requests / Issues / Links

* [How to: Delete cache garbage directories](https://github.com/carrierwaveuploader/carrierwave/wiki/How-to:-Delete-cache-garbage-directories)
* [Remove the cached file after storing it carrierwaveuploader#107](carrierwaveuploader#107)
* [Remove the cached file after storing it carrierwaveuploader#125](carrierwaveuploader#125)
* [delete cache garbage dirs carrierwaveuploader#338](carrierwaveuploader#338)
* [delete cache garbage dirs issue carrierwaveuploader#338 carrierwaveuploader#346](carrierwaveuploader#346)
* [Issue 338 carrierwaveuploader#393](carrierwaveuploader#393)
* [tmp files not being deleted carrierwaveuploader#1489](carrierwaveuploader#1489)
Deradon added a commit to Deradon/carrierwave that referenced this pull request Nov 26, 2015
== Problem

    Errno::EMLINK: Too many links @ dir_s_mkdir

== Full Backtrace (carrierwave 0.9)

    /opt/rubies/ruby-2.1.5/lib/ruby/2.1.0/fileutils.rb:247 :in `mkdir`
    /opt/rubies/ruby-2.1.5/lib/ruby/2.1.0/fileutils.rb:247 :in `fu_mkdir`
    /opt/rubies/ruby-2.1.5/lib/ruby/2.1.0/fileutils.rb:224 :in `block (2 levels) in mkdir_p`
    /opt/rubies/ruby-2.1.5/lib/ruby/2.1.0/fileutils.rb:222 :in `reverse_each`
    /opt/rubies/ruby-2.1.5/lib/ruby/2.1.0/fileutils.rb:222 :in `block in mkdir_p`
    /opt/rubies/ruby-2.1.5/lib/ruby/2.1.0/fileutils.rb:208 :in `each`
    /opt/rubies/ruby-2.1.5/lib/ruby/2.1.0/fileutils.rb:208 :in `mkdir_p`
    [GEM_ROOT]/gems/carrierwave-0.9.0/lib/carrierwave/sanitized_file.rb:290 :in `mkdir!`
    [GEM_ROOT]/gems/carrierwave-0.9.0/lib/carrierwave/sanitized_file.rb:209 :in `copy_to`
    [GEM_ROOT]/gems/carrierwave-0.9.0/lib/carrierwave/uploader/cache.rb:131 :in `block in cache!`
    [GEM_ROOT]/gems/carrierwave-0.9.0/lib/carrierwave/uploader/callbacks.rb:17 :in `with_callbacks`
    [GEM_ROOT]/gems/carrierwave-0.9.0/lib/carrierwave/uploader/cache.rb:122 :in `cache!`
    [GEM_ROOT]/gems/carrierwave-0.9.0/lib/carrierwave/mount.rb:327 :in `cache`
    [GEM_ROOT]/gems/carrierwave-0.9.0/lib/carrierwave/mount.rb:179 :in `file=`
    [GEM_ROOT]/gems/carrierwave-0.9.0/lib/carrierwave/orm/activerecord.rb:38 :in `file=`

== Why

Some file systems only allow a limited number of subdirectories.
Ext3 for example only allow ~32k subdirectories.

== Reproduce

Let's imagine a rails app with a User#avatar

    require 'tempfile'
    32001.times { User.new avatar: Tempfile.new("foo") }
    # This will create 32001 dirs within /public/uploads/tmp

== Fix

Clean cache after caching failed.

== Related Pull Requests / Issues / Links

* [How to: Delete cache garbage directories](https://github.com/carrierwaveuploader/carrierwave/wiki/How-to:-Delete-cache-garbage-directories)
* [Remove the cached file after storing it carrierwaveuploader#107](carrierwaveuploader#107)
* [Remove the cached file after storing it carrierwaveuploader#125](carrierwaveuploader#125)
* [delete cache garbage dirs carrierwaveuploader#338](carrierwaveuploader#338)
* [delete cache garbage dirs issue carrierwaveuploader#338 carrierwaveuploader#346](carrierwaveuploader#346)
* [Issue 338 carrierwaveuploader#393](carrierwaveuploader#393)
* [tmp files not being deleted carrierwaveuploader#1489](carrierwaveuploader#1489)
mynock pushed a commit to mynock/carrierwave that referenced this pull request Aug 9, 2016
== Problem

    Errno::EMLINK: Too many links @ dir_s_mkdir

== Full Backtrace (carrierwave 0.9)

    /opt/rubies/ruby-2.1.5/lib/ruby/2.1.0/fileutils.rb:247 :in `mkdir`
    /opt/rubies/ruby-2.1.5/lib/ruby/2.1.0/fileutils.rb:247 :in `fu_mkdir`
    /opt/rubies/ruby-2.1.5/lib/ruby/2.1.0/fileutils.rb:224 :in `block (2 levels) in mkdir_p`
    /opt/rubies/ruby-2.1.5/lib/ruby/2.1.0/fileutils.rb:222 :in `reverse_each`
    /opt/rubies/ruby-2.1.5/lib/ruby/2.1.0/fileutils.rb:222 :in `block in mkdir_p`
    /opt/rubies/ruby-2.1.5/lib/ruby/2.1.0/fileutils.rb:208 :in `each`
    /opt/rubies/ruby-2.1.5/lib/ruby/2.1.0/fileutils.rb:208 :in `mkdir_p`
    [GEM_ROOT]/gems/carrierwave-0.9.0/lib/carrierwave/sanitized_file.rb:290 :in `mkdir!`
    [GEM_ROOT]/gems/carrierwave-0.9.0/lib/carrierwave/sanitized_file.rb:209 :in `copy_to`
    [GEM_ROOT]/gems/carrierwave-0.9.0/lib/carrierwave/uploader/cache.rb:131 :in `block in cache!`
    [GEM_ROOT]/gems/carrierwave-0.9.0/lib/carrierwave/uploader/callbacks.rb:17 :in `with_callbacks`
    [GEM_ROOT]/gems/carrierwave-0.9.0/lib/carrierwave/uploader/cache.rb:122 :in `cache!`
    [GEM_ROOT]/gems/carrierwave-0.9.0/lib/carrierwave/mount.rb:327 :in `cache`
    [GEM_ROOT]/gems/carrierwave-0.9.0/lib/carrierwave/mount.rb:179 :in `file=`
    [GEM_ROOT]/gems/carrierwave-0.9.0/lib/carrierwave/orm/activerecord.rb:38 :in `file=`

== Why

Some file systems only allow a limited number of subdirectories.
Ext3 for example only allow ~32k subdirectories.

== Reproduce

Let's imagine a rails app with a User#avatar

    require 'tempfile'
    32001.times { User.new avatar: Tempfile.new("foo") }
    # This will create 32001 dirs within /public/uploads/tmp

== Fix

Clean cache after caching failed.

== Related Pull Requests / Issues / Links

* [How to: Delete cache garbage directories](https://github.com/carrierwaveuploader/carrierwave/wiki/How-to:-Delete-cache-garbage-directories)
* [Remove the cached file after storing it carrierwaveuploader#107](carrierwaveuploader#107)
* [Remove the cached file after storing it carrierwaveuploader#125](carrierwaveuploader#125)
* [delete cache garbage dirs carrierwaveuploader#338](carrierwaveuploader#338)
* [delete cache garbage dirs issue carrierwaveuploader#338 carrierwaveuploader#346](carrierwaveuploader#346)
* [Issue 338 carrierwaveuploader#393](carrierwaveuploader#393)
* [tmp files not being deleted carrierwaveuploader#1489](carrierwaveuploader#1489)
This pull request was closed.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

3 participants