mini_magick 1.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of mini_magick might be problematic. Click here for more details.
- data/MIT-LICENSE +21 -0
- data/README +64 -0
- data/Rakefile +68 -0
- data/lib/mini_magick.rb +119 -0
- data/test/mini_magick_test.rb +96 -0
- data/test/not_an_image.php +604 -0
- data/test/simple.gif +0 -0
- metadata +51 -0
data/MIT-LICENSE
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
Copyright (c) 2005 Corey Johnson probablycorey@gmail.com
|
2
|
+
|
3
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
4
|
+
a copy of this software and associated documentation files (the
|
5
|
+
"Software"), to deal in the Software without restriction, including
|
6
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
7
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
8
|
+
permit persons to whom the Software is furnished to do so, subject to
|
9
|
+
the following conditions:
|
10
|
+
|
11
|
+
The above copyright notice and this permission notice shall be
|
12
|
+
included in all copies or substantial portions of the Software.
|
13
|
+
|
14
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
15
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
16
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
17
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
18
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
19
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
20
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
21
|
+
|
data/README
ADDED
@@ -0,0 +1,64 @@
|
|
1
|
+
MiniMagick
|
2
|
+
==========
|
3
|
+
|
4
|
+
A ruby wrapper for ImageMagick command line.
|
5
|
+
|
6
|
+
Why?
|
7
|
+
---
|
8
|
+
I was using RMagick and loving it, but it was eating up huge amounts of memory. A simple script like this...
|
9
|
+
|
10
|
+
Magick::read("image.jpg") do |f|
|
11
|
+
f.write("manipulated.jpg")
|
12
|
+
end
|
13
|
+
|
14
|
+
...would use over 100 Megs of Ram. On my local machine this wasn't a problem, but on my hosting server the ruby apps would crash because of their 100 Meg memory limit.
|
15
|
+
|
16
|
+
Solution!
|
17
|
+
---------
|
18
|
+
Using MiniMagick the ruby processes memory remains small (it spawns ImageMagick's command line program mogrify which takes up some memory as well, but is much smaller compared to RMagick)
|
19
|
+
|
20
|
+
MiniMagick gives you access to all the commandline options ImageMagick has (Found here http://www.imagemagick.org/script/mogrify.php)
|
21
|
+
|
22
|
+
Examples
|
23
|
+
--------
|
24
|
+
|
25
|
+
Want to make a thumbnail from a file...
|
26
|
+
|
27
|
+
image = MiniMagick::Image.from_file("input.jpg")
|
28
|
+
image.resize "100x100"
|
29
|
+
image.write("output.jpg")
|
30
|
+
|
31
|
+
Want to make a thumbnail from a blob...
|
32
|
+
|
33
|
+
image = MiniMagick::Image.from_blob(blob)
|
34
|
+
image.resize "100x100"
|
35
|
+
image.write("output.jpg")
|
36
|
+
|
37
|
+
Need to combine several options?
|
38
|
+
|
39
|
+
image = MiniMagick::Image.from_file("input.jpg")
|
40
|
+
image.combine_options do |c|
|
41
|
+
c.sample "50%"
|
42
|
+
c.rotate "-90>"
|
43
|
+
end
|
44
|
+
image.write("output.jpg")
|
45
|
+
|
46
|
+
Want to manipulate an image at its source (You won't have to write it out because the transformations are done on that file)
|
47
|
+
|
48
|
+
image = MiniMagick::Image.new("input.jpg")
|
49
|
+
image.resize "100x100"
|
50
|
+
|
51
|
+
Requirements
|
52
|
+
------------
|
53
|
+
You must have ImageMagick installed.
|
54
|
+
|
55
|
+
|
56
|
+
How To Install
|
57
|
+
--------------
|
58
|
+
(I've only tested this on OS X and Linux)
|
59
|
+
|
60
|
+
I've packaged up MiniMagick as a rails plugin. Just unzip the file to the /vendor/plugins directory of your rails folder and you have access to all the magick.
|
61
|
+
|
62
|
+
MiniMagick does NOT require rails though. All the code you need to use MiniMagick is located in the mini_magick/lib/mini_magick.rb file.
|
63
|
+
|
64
|
+
|
data/Rakefile
ADDED
@@ -0,0 +1,68 @@
|
|
1
|
+
require 'rake'
|
2
|
+
require 'rake/testtask'
|
3
|
+
require 'rake/rdoctask'
|
4
|
+
require 'rake/packagetask'
|
5
|
+
require 'rake/gempackagetask'
|
6
|
+
|
7
|
+
$:.unshift(File.dirname(__FILE__) + "/lib")
|
8
|
+
require 'mini_magick'
|
9
|
+
|
10
|
+
PKG_NAME = 'mini_magick'
|
11
|
+
PKG_VERSION = MiniMagick::VERSION
|
12
|
+
PKG_FILE_NAME = "#{PKG_NAME}-#{PKG_VERSION}"
|
13
|
+
|
14
|
+
desc 'Default: run unit tests.'
|
15
|
+
task :default => :test
|
16
|
+
|
17
|
+
desc "Clean generated files"
|
18
|
+
task :clean do
|
19
|
+
rm FileList['test/output/*.png']
|
20
|
+
rm_rf 'pkg'
|
21
|
+
rm_rf 'doc'
|
22
|
+
end
|
23
|
+
|
24
|
+
desc 'Test the mini_magick plugin.'
|
25
|
+
Rake::TestTask.new(:test) do |t|
|
26
|
+
t.libs << 'lib'
|
27
|
+
t.pattern = 'test/**/*_test.rb'
|
28
|
+
t.verbose = true
|
29
|
+
end
|
30
|
+
|
31
|
+
desc 'Generate documentation for the mini_magick plugin.'
|
32
|
+
Rake::RDocTask.new(:rdoc) do |rdoc|
|
33
|
+
rdoc.rdoc_dir = 'rdoc'
|
34
|
+
rdoc.title = 'MiniMagick'
|
35
|
+
rdoc.options << '--line-numbers --inline-source'
|
36
|
+
rdoc.rdoc_files.include('README')
|
37
|
+
rdoc.rdoc_files.include('lib/**/*.rb')
|
38
|
+
end
|
39
|
+
|
40
|
+
|
41
|
+
# Create compressed packages
|
42
|
+
spec = Gem::Specification.new do |s|
|
43
|
+
s.platform = Gem::Platform::RUBY
|
44
|
+
s.name = PKG_NAME
|
45
|
+
s.summary = "Manipulate images with minimal use of memory."
|
46
|
+
s.description = %q{Uses command-line ImageMagick tools to resize, rotate, and mogrify images.}
|
47
|
+
s.version = PKG_VERSION
|
48
|
+
|
49
|
+
s.author = "Corey Johnson"
|
50
|
+
s.email = "probablycorey@gmail.com"
|
51
|
+
s.rubyforge_project = PKG_NAME
|
52
|
+
s.homepage = "http://journal.gleepglop.com"
|
53
|
+
|
54
|
+
s.has_rdoc = true
|
55
|
+
s.requirements << 'none'
|
56
|
+
s.require_path = 'lib'
|
57
|
+
s.autorequire = 'mini_magick'
|
58
|
+
|
59
|
+
s.files = [ "Rakefile", "README", "MIT-LICENSE" ]
|
60
|
+
s.files = s.files + Dir.glob( "lib/**/*" ).delete_if { |item| item.include?( "\.svn" ) }
|
61
|
+
s.files = s.files + Dir.glob( "test/**/*" ).delete_if { |item| item.include?( "\.svn" ) || item.include?("\.png") }
|
62
|
+
end
|
63
|
+
|
64
|
+
Rake::GemPackageTask.new(spec) do |p|
|
65
|
+
p.gem_spec = spec
|
66
|
+
p.need_tar = true
|
67
|
+
p.need_zip = true
|
68
|
+
end
|
data/lib/mini_magick.rb
ADDED
@@ -0,0 +1,119 @@
|
|
1
|
+
require "open-uri"
|
2
|
+
require "tempfile"
|
3
|
+
require "stringio"
|
4
|
+
|
5
|
+
module MiniMagick
|
6
|
+
|
7
|
+
VERSION = '1.0.1'
|
8
|
+
|
9
|
+
class MiniMagickError < Exception
|
10
|
+
end
|
11
|
+
|
12
|
+
class Image
|
13
|
+
attr :path
|
14
|
+
|
15
|
+
# Attributes
|
16
|
+
# ----------
|
17
|
+
def width
|
18
|
+
info[:width]
|
19
|
+
end
|
20
|
+
|
21
|
+
def height
|
22
|
+
info[:height]
|
23
|
+
end
|
24
|
+
|
25
|
+
def format
|
26
|
+
info[:format]
|
27
|
+
end
|
28
|
+
|
29
|
+
# Class Methods
|
30
|
+
# -------------
|
31
|
+
class <<self
|
32
|
+
def from_blob(blob)
|
33
|
+
begin
|
34
|
+
tmp = Tempfile.new("minimagic")
|
35
|
+
tmp.write(blob)
|
36
|
+
ensure
|
37
|
+
tmp.close
|
38
|
+
end
|
39
|
+
|
40
|
+
return self.new(tmp.path)
|
41
|
+
end
|
42
|
+
|
43
|
+
# Use this if you don't want to overwrite the image file
|
44
|
+
def from_file(image_path)
|
45
|
+
File.open(image_path, "r") do |f|
|
46
|
+
self.from_blob(f.read)
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
# Instance Methods
|
52
|
+
# ----------------
|
53
|
+
def initialize(input_path)
|
54
|
+
|
55
|
+
@path = input_path
|
56
|
+
|
57
|
+
# Ensure that the file is an image
|
58
|
+
run_command("identify #{@path}")
|
59
|
+
end
|
60
|
+
|
61
|
+
def write(output_path)
|
62
|
+
open(output_path, "w") do |output_file|
|
63
|
+
open(@path) do |image_file|
|
64
|
+
output_file.write(image_file.read)
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
# Any message that sent that is unknown is sent through morgrify
|
70
|
+
#
|
71
|
+
# Look here to find all the commands (http://www.imagemagick.org/script/mogrify.php)
|
72
|
+
def method_missing(symbol, *args)
|
73
|
+
args.push(@path) # push the path onto the end
|
74
|
+
run_command("mogrify", "-#{symbol}", *args)
|
75
|
+
end
|
76
|
+
|
77
|
+
# You can use multiple commands together using this method
|
78
|
+
def combine_options(&block)
|
79
|
+
c = CommandBuilder.new
|
80
|
+
block.call c
|
81
|
+
run_command("mogrify", *c.args << @path)
|
82
|
+
end
|
83
|
+
|
84
|
+
# Private (Don't look in here!)
|
85
|
+
# -----------------------------
|
86
|
+
private
|
87
|
+
|
88
|
+
def info
|
89
|
+
info_array = run_command("identify", @path).split
|
90
|
+
info = {
|
91
|
+
:format => info_array[1],
|
92
|
+
:width => info_array[2].match(/^\d+/)[0].to_i,
|
93
|
+
:height => info_array[2].match(/\d+$/)[0].to_i
|
94
|
+
}
|
95
|
+
end
|
96
|
+
|
97
|
+
def run_command(command, *args)
|
98
|
+
args = args.collect {|a| a.to_s}
|
99
|
+
output = `#{command} #{args.join(' ')}`
|
100
|
+
if $? != 0
|
101
|
+
raise MiniMagickError, "ImageMagick command (#{command} #{args.join(' ')}) failed: Error Given #{$?}"
|
102
|
+
else
|
103
|
+
return output
|
104
|
+
end
|
105
|
+
end
|
106
|
+
end
|
107
|
+
|
108
|
+
class CommandBuilder
|
109
|
+
attr :args
|
110
|
+
|
111
|
+
def initialize
|
112
|
+
@args = []
|
113
|
+
end
|
114
|
+
|
115
|
+
def method_missing(symbol, *args)
|
116
|
+
@args += ["-#{symbol}"] + args
|
117
|
+
end
|
118
|
+
end
|
119
|
+
end
|
@@ -0,0 +1,96 @@
|
|
1
|
+
begin
|
2
|
+
# Rails context
|
3
|
+
require File.dirname(__FILE__) + '/../../../../test/test_helper'
|
4
|
+
rescue LoadError => e
|
5
|
+
# Normal Ruby context
|
6
|
+
$:.unshift(File.dirname(__FILE__) + "/../lib/")
|
7
|
+
require 'test/unit'
|
8
|
+
require 'mini_magick'
|
9
|
+
end
|
10
|
+
|
11
|
+
class ImageTest < Test::Unit::TestCase
|
12
|
+
include MiniMagick
|
13
|
+
|
14
|
+
CURRENT_DIR = File.dirname(File.expand_path(__FILE__)) + "/"
|
15
|
+
|
16
|
+
SIMPLE_IMAGE_PATH = CURRENT_DIR + "simple.gif"
|
17
|
+
NOT_AN_IMAGE_PATH = CURRENT_DIR + "not_an_image.php"
|
18
|
+
|
19
|
+
def test_image_from_blob
|
20
|
+
File.open(SIMPLE_IMAGE_PATH, "r") do |f|
|
21
|
+
image = Image.from_blob(f.read)
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
def test_image_from_file
|
26
|
+
image = Image.from_file(SIMPLE_IMAGE_PATH)
|
27
|
+
end
|
28
|
+
|
29
|
+
def test_image_new
|
30
|
+
image = Image.new(SIMPLE_IMAGE_PATH)
|
31
|
+
end
|
32
|
+
|
33
|
+
def test_image_write
|
34
|
+
output_path = "output.gif"
|
35
|
+
begin
|
36
|
+
image = Image.new(SIMPLE_IMAGE_PATH)
|
37
|
+
image.write output_path
|
38
|
+
|
39
|
+
assert File.exists?(output_path)
|
40
|
+
ensure
|
41
|
+
File.delete output_path
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
def test_not_an_image
|
46
|
+
assert_raise(MiniMagickError) do
|
47
|
+
image = Image.new(NOT_AN_IMAGE_PATH)
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
def test_image_info
|
52
|
+
image = Image.new(SIMPLE_IMAGE_PATH)
|
53
|
+
assert_equal 150, image.width
|
54
|
+
assert_equal 55, image.height
|
55
|
+
assert_match(/^gif$/i, image.format)
|
56
|
+
end
|
57
|
+
|
58
|
+
def test_image_resize
|
59
|
+
image = Image.from_file(SIMPLE_IMAGE_PATH)
|
60
|
+
image.resize "20x30!"
|
61
|
+
|
62
|
+
assert_equal 20, image.width
|
63
|
+
assert_equal 30, image.height
|
64
|
+
assert_match(/^gif$/i, image.format)
|
65
|
+
end
|
66
|
+
|
67
|
+
def test_image_combine_options_resize_blur
|
68
|
+
image = Image.from_file(SIMPLE_IMAGE_PATH)
|
69
|
+
image.combine_options do |c|
|
70
|
+
c.resize "20x30!"
|
71
|
+
c.blur 50
|
72
|
+
end
|
73
|
+
|
74
|
+
assert_equal 20, image.width
|
75
|
+
assert_equal 30, image.height
|
76
|
+
assert_match(/^gif$/i, image.format)
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
class CommandBuilderTest < Test::Unit::TestCase
|
81
|
+
include MiniMagick
|
82
|
+
|
83
|
+
def test_basic
|
84
|
+
c = CommandBuilder.new
|
85
|
+
c.resize "30x40"
|
86
|
+
assert_equal "-resize 30x40", c.args.join(" ")
|
87
|
+
end
|
88
|
+
|
89
|
+
def test_complicated
|
90
|
+
c = CommandBuilder.new
|
91
|
+
c.resize "30x40"
|
92
|
+
c.input 1, 3, 4
|
93
|
+
c.lingo "mome fingo"
|
94
|
+
assert_equal "-resize 30x40 -input 1 3 4 -lingo mome fingo", c.args.join(" ")
|
95
|
+
end
|
96
|
+
end
|
@@ -0,0 +1,604 @@
|
|
1
|
+
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
2
|
+
<html dir="ltr"><head>
|
3
|
+
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"><title>TextDrive Community Forum / Lighttpd says Insufficient memory (case 4)</title>
|
4
|
+
|
5
|
+
<link rel="stylesheet" type="text/css" href="not_an_image_files/Oxygen.css">
|
6
|
+
<script type="text/javascript">
|
7
|
+
<!--
|
8
|
+
function process_form(the_form)
|
9
|
+
{
|
10
|
+
var element_names = new Object()
|
11
|
+
element_names["req_message"] = "Message"
|
12
|
+
|
13
|
+
if (document.all || document.getElementById)
|
14
|
+
{
|
15
|
+
for (i = 0; i < the_form.length; ++i)
|
16
|
+
{
|
17
|
+
var elem = the_form.elements[i]
|
18
|
+
if (elem.name && elem.name.substring(0, 4) == "req_")
|
19
|
+
{
|
20
|
+
if (elem.type && (elem.type=="text" || elem.type=="textarea" || elem.type=="password" || elem.type=="file") && elem.value=='')
|
21
|
+
{
|
22
|
+
alert("\"" + element_names[elem.name] + "\" is a required field in this form.")
|
23
|
+
elem.focus()
|
24
|
+
return false
|
25
|
+
}
|
26
|
+
}
|
27
|
+
}
|
28
|
+
}
|
29
|
+
|
30
|
+
return true
|
31
|
+
}
|
32
|
+
// -->
|
33
|
+
</script>
|
34
|
+
<style type="text/css">
|
35
|
+
|
36
|
+
body
|
37
|
+
{
|
38
|
+
margin: 0px;
|
39
|
+
padding: 0px;
|
40
|
+
}
|
41
|
+
|
42
|
+
#header
|
43
|
+
{
|
44
|
+
margin: 0;
|
45
|
+
padding: 0;
|
46
|
+
height: 100px;
|
47
|
+
text-align: left;
|
48
|
+
background-color: #003;
|
49
|
+
}
|
50
|
+
|
51
|
+
#navlinks
|
52
|
+
{
|
53
|
+
font: 10px Verdana, Arial, Helvetica, sans-serif;
|
54
|
+
color: #333333;
|
55
|
+
padding: 10px;
|
56
|
+
|
57
|
+
}
|
58
|
+
</style></head>
|
59
|
+
|
60
|
+
|
61
|
+
<body>
|
62
|
+
<div id="header"><a href="http://textdrive.com/"><img src="not_an_image_files/textdrive_head.gif" style="border: 0pt none ;" alt="TextDrive" height="100" width="600"></a></div>
|
63
|
+
<div id="punwrap">
|
64
|
+
<div id="punviewtopic" class="pun">
|
65
|
+
|
66
|
+
<div id="brdheader" class="block">
|
67
|
+
<div class="box">
|
68
|
+
<div id="brdmenui" class="inbox">
|
69
|
+
<ul>
|
70
|
+
<li id="navindex"><a href="http://forum.textdrive.com/index.php">Index</a></li>
|
71
|
+
<li id="navuserlist"><a href="http://forum.textdrive.com/userlist.php">User list</a></li>
|
72
|
+
<li id="navsearch"><a href="http://forum.textdrive.com/search.php">Search</a></li>
|
73
|
+
<li id="navprofile"><a href="http://forum.textdrive.com/profile.php?id=1067">Profile</a></li>
|
74
|
+
<li id="navlogout"><a href="http://forum.textdrive.com/login.php?action=out&id=1067">Logout</a></li>
|
75
|
+
</ul>
|
76
|
+
</div>
|
77
|
+
<div id="brdwelcome" class="inbox">
|
78
|
+
<ul class="conl">
|
79
|
+
<li>Logged in as <strong>geography</strong></li>
|
80
|
+
<li>Last visit: Today 21:29:23</li>
|
81
|
+
</ul>
|
82
|
+
<div class="clearer"></div>
|
83
|
+
</div>
|
84
|
+
</div>
|
85
|
+
</div>
|
86
|
+
|
87
|
+
|
88
|
+
|
89
|
+
<div class="linkst">
|
90
|
+
<div class="inbox">
|
91
|
+
<p class="pagelink conl">Pages: <strong>1</strong></p>
|
92
|
+
<p class="postlink conr"><a href="http://forum.textdrive.com/post.php?tid=7356">Post reply</a></p>
|
93
|
+
<ul><li><a href="http://forum.textdrive.com/index.php">Index</a></li><li> » <a href="http://forum.textdrive.com/viewforum.php?id=4">Troubleshooting</a></li><li> » Lighttpd says Insufficient memory (case 4)</li></ul>
|
94
|
+
<div class="clearer"></div>
|
95
|
+
</div>
|
96
|
+
</div>
|
97
|
+
|
98
|
+
<div id="p62698" class="blockpost rowodd firstpost">
|
99
|
+
<h2><span><span class="conr">#1 </span><a href="http://forum.textdrive.com/viewtopic.php?pid=62698#p62698">Yesterday 20:47:30</a></span></h2>
|
100
|
+
<div class="box">
|
101
|
+
<div class="inbox">
|
102
|
+
<div class="postleft">
|
103
|
+
<dl>
|
104
|
+
<dt><strong><a href="http://forum.textdrive.com/profile.php?id=1067">geography</a></strong></dt>
|
105
|
+
<dd class="usertitle"><strong>Member</strong></dd>
|
106
|
+
<dd class="postavatar"></dd>
|
107
|
+
<dd>From: NYC</dd>
|
108
|
+
<dd>Registered: 2005-03-17</dd>
|
109
|
+
<dd>Posts: 10</dd>
|
110
|
+
<dd class="usercontacts"><a href="http://forum.textdrive.com/misc.php?email=1067">E-mail</a> <a href="http://journal.gleepglop.com/">Website</a></dd>
|
111
|
+
</dl>
|
112
|
+
</div>
|
113
|
+
<div class="postright">
|
114
|
+
<h3>Lighttpd says Insufficient memory (case 4)</h3>
|
115
|
+
<div class="postmsg">
|
116
|
+
<p>I
|
117
|
+
have a rails app that downloads images found on the web. I'm running it
|
118
|
+
through lighttpd and everything works fine unless it is a large image
|
119
|
+
(Like over 500k).</p>
|
120
|
+
|
121
|
+
<p>Then lighttpd throughs this error:</p>
|
122
|
+
Insufficient memory (case 4)
|
123
|
+
|
124
|
+
<p>Has anyone else encountered this? What exactly could be the root of this error?</p>
|
125
|
+
|
126
|
+
|
127
|
+
|
128
|
+
</div>
|
129
|
+
</div>
|
130
|
+
<div class="clearer"></div>
|
131
|
+
<div class="postfootleft"><p><strong>Online</strong></p></div>
|
132
|
+
<div class="postfootright"><ul><li class="postreport"><a href="http://forum.textdrive.com/misc.php?report=62698">Report</a> | </li><li class="postedit"><a href="http://forum.textdrive.com/edit.php?id=62698">Edit</a> | </li><li class="postquote"><a href="http://forum.textdrive.com/post.php?tid=7356&qid=62698">Quote</a></li></ul></div>
|
133
|
+
</div>
|
134
|
+
</div>
|
135
|
+
</div>
|
136
|
+
|
137
|
+
<div id="p62708" class="blockpost roweven">
|
138
|
+
<h2><span><span class="conr">#2 </span><a href="http://forum.textdrive.com/viewtopic.php?pid=62708#p62708">Yesterday 22:06:50</a></span></h2>
|
139
|
+
<div class="box">
|
140
|
+
<div class="inbox">
|
141
|
+
<div class="postleft">
|
142
|
+
<dl>
|
143
|
+
<dt><strong><a href="http://forum.textdrive.com/profile.php?id=2707">jqshenker</a></strong></dt>
|
144
|
+
<dd class="usertitle"><strong>Member</strong></dd>
|
145
|
+
<dd class="postavatar"><img src="not_an_image_files/2707.jfif" alt="" height="60" width="60"></dd>
|
146
|
+
<dd>From: Palo Alto, CA</dd>
|
147
|
+
<dd>Registered: 2005-09-06</dd>
|
148
|
+
<dd>Posts: 422</dd>
|
149
|
+
<dd class="usercontacts"><a href="http://forum.textdrive.com/misc.php?email=2707">E-mail</a> <a href="http://nothingmuch.textdriven.com/">Website</a></dd>
|
150
|
+
</dl>
|
151
|
+
</div>
|
152
|
+
<div class="postright">
|
153
|
+
<h3> Re: Lighttpd says Insufficient memory (case 4)</h3>
|
154
|
+
<div class="postmsg">
|
155
|
+
<p>Yeah,
|
156
|
+
it's the limits. Are you downloading it, or resizing it as well?
|
157
|
+
Downloading usually isn't the problem, it's the resizing that breaks.</p>
|
158
|
+
|
159
|
+
|
160
|
+
|
161
|
+
</div>
|
162
|
+
<div class="postsignature"><hr><a href="http://soggyslides.textdriven.com/">soggyslides - {abstractisms daily}</a></div>
|
163
|
+
</div>
|
164
|
+
<div class="clearer"></div>
|
165
|
+
<div class="postfootleft"><p>Offline</p></div>
|
166
|
+
<div class="postfootright"><ul><li class="postreport"><a href="http://forum.textdrive.com/misc.php?report=62708">Report</a> | </li><li class="postquote"><a href="http://forum.textdrive.com/post.php?tid=7356&qid=62708">Quote</a></li></ul></div>
|
167
|
+
</div>
|
168
|
+
</div>
|
169
|
+
</div>
|
170
|
+
|
171
|
+
<div id="p62709" class="blockpost rowodd">
|
172
|
+
<h2><span><span class="conr">#3 </span><a href="http://forum.textdrive.com/viewtopic.php?pid=62709#p62709">Yesterday 22:12:28</a></span></h2>
|
173
|
+
<div class="box">
|
174
|
+
<div class="inbox">
|
175
|
+
<div class="postleft">
|
176
|
+
<dl>
|
177
|
+
<dt><strong><a href="http://forum.textdrive.com/profile.php?id=1045">julik</a></strong></dt>
|
178
|
+
<dd class="usertitle"><strong>Member</strong></dd>
|
179
|
+
<dd class="postavatar"><img src="not_an_image_files/1045.png" alt="" height="60" width="57"></dd>
|
180
|
+
<dd>From: Utrecht, Netherlands</dd>
|
181
|
+
<dd>Registered: 2005-03-12</dd>
|
182
|
+
<dd>Posts: 137</dd>
|
183
|
+
<dd class="usercontacts"><a href="http://forum.textdrive.com/misc.php?email=1045">E-mail</a> <a href="http://live.julik.nl/">Website</a></dd>
|
184
|
+
</dl>
|
185
|
+
</div>
|
186
|
+
<div class="postright">
|
187
|
+
<h3> Re: Lighttpd says Insufficient memory (case 4)</h3>
|
188
|
+
<div class="postmsg">
|
189
|
+
<p>that doesn't feel well</p>
|
190
|
+
|
191
|
+
|
192
|
+
|
193
|
+
</div>
|
194
|
+
</div>
|
195
|
+
<div class="clearer"></div>
|
196
|
+
<div class="postfootleft"><p><strong>Online</strong></p></div>
|
197
|
+
<div class="postfootright"><ul><li class="postreport"><a href="http://forum.textdrive.com/misc.php?report=62709">Report</a> | </li><li class="postquote"><a href="http://forum.textdrive.com/post.php?tid=7356&qid=62709">Quote</a></li></ul></div>
|
198
|
+
</div>
|
199
|
+
</div>
|
200
|
+
</div>
|
201
|
+
|
202
|
+
<div id="p62732" class="blockpost roweven">
|
203
|
+
<h2><span><span class="conr">#4 </span><a href="http://forum.textdrive.com/viewtopic.php?pid=62732#p62732">Today 03:46:42</a></span></h2>
|
204
|
+
<div class="box">
|
205
|
+
<div class="inbox">
|
206
|
+
<div class="postleft">
|
207
|
+
<dl>
|
208
|
+
<dt><strong><a href="http://forum.textdrive.com/profile.php?id=1067">geography</a></strong></dt>
|
209
|
+
<dd class="usertitle"><strong>Member</strong></dd>
|
210
|
+
<dd class="postavatar"></dd>
|
211
|
+
<dd>From: NYC</dd>
|
212
|
+
<dd>Registered: 2005-03-17</dd>
|
213
|
+
<dd>Posts: 10</dd>
|
214
|
+
<dd class="usercontacts"><a href="http://forum.textdrive.com/misc.php?email=1067">E-mail</a> <a href="http://journal.gleepglop.com/">Website</a></dd>
|
215
|
+
</dl>
|
216
|
+
</div>
|
217
|
+
<div class="postright">
|
218
|
+
<h3> Re: Lighttpd says Insufficient memory (case 4)</h3>
|
219
|
+
<div class="postmsg">
|
220
|
+
<p>I'm resizing it too. But that is not where it dies.<br>
|
221
|
+
It dies right before I write it to disk (With Magick::Image.write from RMagick)</p>
|
222
|
+
|
223
|
+
|
224
|
+
|
225
|
+
</div>
|
226
|
+
</div>
|
227
|
+
<div class="clearer"></div>
|
228
|
+
<div class="postfootleft"><p><strong>Online</strong></p></div>
|
229
|
+
<div class="postfootright"><ul><li class="postreport"><a href="http://forum.textdrive.com/misc.php?report=62732">Report</a> | </li><li class="postdelete"><a href="http://forum.textdrive.com/delete.php?id=62732">Delete</a> | </li><li class="postedit"><a href="http://forum.textdrive.com/edit.php?id=62732">Edit</a> | </li><li class="postquote"><a href="http://forum.textdrive.com/post.php?tid=7356&qid=62732">Quote</a></li></ul></div>
|
230
|
+
</div>
|
231
|
+
</div>
|
232
|
+
</div>
|
233
|
+
|
234
|
+
<div id="p62735" class="blockpost rowodd">
|
235
|
+
<h2><span><span class="conr">#5 </span><a href="http://forum.textdrive.com/viewtopic.php?pid=62735#p62735">Today 04:14:08</a></span></h2>
|
236
|
+
<div class="box">
|
237
|
+
<div class="inbox">
|
238
|
+
<div class="postleft">
|
239
|
+
<dl>
|
240
|
+
<dt><strong><a href="http://forum.textdrive.com/profile.php?id=2707">jqshenker</a></strong></dt>
|
241
|
+
<dd class="usertitle"><strong>Member</strong></dd>
|
242
|
+
<dd class="postavatar"><img src="not_an_image_files/2707.jfif" alt="" height="60" width="60"></dd>
|
243
|
+
<dd>From: Palo Alto, CA</dd>
|
244
|
+
<dd>Registered: 2005-09-06</dd>
|
245
|
+
<dd>Posts: 422</dd>
|
246
|
+
<dd class="usercontacts"><a href="http://forum.textdrive.com/misc.php?email=2707">E-mail</a> <a href="http://nothingmuch.textdriven.com/">Website</a></dd>
|
247
|
+
</dl>
|
248
|
+
</div>
|
249
|
+
<div class="postright">
|
250
|
+
<h3> Re: Lighttpd says Insufficient memory (case 4)</h3>
|
251
|
+
<div class="postmsg">
|
252
|
+
<p></p><blockquote><div class="incqbox"><h4>geography wrote:</h4><p>I'm resizing it too. But that is not where it dies.<br>
|
253
|
+
It dies right before I write it to disk (With Magick::Image.write from RMagick)</p></div></blockquote><p><br>
|
254
|
+
I meant "resizing" as anything to do with RMagick. There've been a
|
255
|
+
couple threads on this, search around. Resizing you image before upload
|
256
|
+
or not using RMagick and instead using ImageMagick via the commandline
|
257
|
+
might or might not work.... basically you can't do much, unfortunately.</p>
|
258
|
+
|
259
|
+
|
260
|
+
|
261
|
+
</div>
|
262
|
+
<div class="postsignature"><hr><a href="http://soggyslides.textdriven.com/">soggyslides - {abstractisms daily}</a></div>
|
263
|
+
</div>
|
264
|
+
<div class="clearer"></div>
|
265
|
+
<div class="postfootleft"><p>Offline</p></div>
|
266
|
+
<div class="postfootright"><ul><li class="postreport"><a href="http://forum.textdrive.com/misc.php?report=62735">Report</a> | </li><li class="postquote"><a href="http://forum.textdrive.com/post.php?tid=7356&qid=62735">Quote</a></li></ul></div>
|
267
|
+
</div>
|
268
|
+
</div>
|
269
|
+
</div>
|
270
|
+
|
271
|
+
<div id="p62737" class="blockpost roweven">
|
272
|
+
<h2><span><span class="conr">#6 </span><a href="http://forum.textdrive.com/viewtopic.php?pid=62737#p62737">Today 04:17:28</a></span></h2>
|
273
|
+
<div class="box">
|
274
|
+
<div class="inbox">
|
275
|
+
<div class="postleft">
|
276
|
+
<dl>
|
277
|
+
<dt><strong><a href="http://forum.textdrive.com/profile.php?id=1097">cch</a></strong></dt>
|
278
|
+
<dd class="usertitle"><strong>Member</strong></dd>
|
279
|
+
<dd class="postavatar"></dd>
|
280
|
+
<dd>Registered: 2005-03-21</dd>
|
281
|
+
<dd>Posts: 108</dd>
|
282
|
+
<dd class="usercontacts"><a href="http://forum.textdrive.com/misc.php?email=1097">E-mail</a></dd>
|
283
|
+
</dl>
|
284
|
+
</div>
|
285
|
+
<div class="postright">
|
286
|
+
<h3> Re: Lighttpd says Insufficient memory (case 4)</h3>
|
287
|
+
<div class="postmsg">
|
288
|
+
<p>what if you use open(fname, 'w'){|f|f.write img.to_blob} ?</p>
|
289
|
+
|
290
|
+
|
291
|
+
|
292
|
+
</div>
|
293
|
+
</div>
|
294
|
+
<div class="clearer"></div>
|
295
|
+
<div class="postfootleft"><p>Offline</p></div>
|
296
|
+
<div class="postfootright"><ul><li class="postreport"><a href="http://forum.textdrive.com/misc.php?report=62737">Report</a> | </li><li class="postquote"><a href="http://forum.textdrive.com/post.php?tid=7356&qid=62737">Quote</a></li></ul></div>
|
297
|
+
</div>
|
298
|
+
</div>
|
299
|
+
</div>
|
300
|
+
|
301
|
+
<div id="p62767" class="blockpost rowodd">
|
302
|
+
<h2><span><span class="conr">#7 </span><a href="http://forum.textdrive.com/viewtopic.php?pid=62767#p62767">Today 15:44:42</a></span></h2>
|
303
|
+
<div class="box">
|
304
|
+
<div class="inbox">
|
305
|
+
<div class="postleft">
|
306
|
+
<dl>
|
307
|
+
<dt><strong><a href="http://forum.textdrive.com/profile.php?id=1067">geography</a></strong></dt>
|
308
|
+
<dd class="usertitle"><strong>Member</strong></dd>
|
309
|
+
<dd class="postavatar"></dd>
|
310
|
+
<dd>From: NYC</dd>
|
311
|
+
<dd>Registered: 2005-03-17</dd>
|
312
|
+
<dd>Posts: 10</dd>
|
313
|
+
<dd class="usercontacts"><a href="http://forum.textdrive.com/misc.php?email=1067">E-mail</a> <a href="http://journal.gleepglop.com/">Website</a></dd>
|
314
|
+
</dl>
|
315
|
+
</div>
|
316
|
+
<div class="postright">
|
317
|
+
<h3> Re: Lighttpd says Insufficient memory (case 4)</h3>
|
318
|
+
<div class="postmsg">
|
319
|
+
<p>Using
|
320
|
+
open(fname, 'w'){|f|f.write img.to_blob} has the same problem... I
|
321
|
+
guess I'll try and run it from the command line but that seems like a
|
322
|
+
drastic step. Why is the memory so limited, shouldn't the server be
|
323
|
+
able to save 500k files, or does imageMagick have a very high overhead?</p>
|
324
|
+
|
325
|
+
|
326
|
+
|
327
|
+
</div>
|
328
|
+
</div>
|
329
|
+
<div class="clearer"></div>
|
330
|
+
<div class="postfootleft"><p><strong>Online</strong></p></div>
|
331
|
+
<div class="postfootright"><ul><li class="postreport"><a href="http://forum.textdrive.com/misc.php?report=62767">Report</a> | </li><li class="postdelete"><a href="http://forum.textdrive.com/delete.php?id=62767">Delete</a> | </li><li class="postedit"><a href="http://forum.textdrive.com/edit.php?id=62767">Edit</a> | </li><li class="postquote"><a href="http://forum.textdrive.com/post.php?tid=7356&qid=62767">Quote</a></li></ul></div>
|
332
|
+
</div>
|
333
|
+
</div>
|
334
|
+
</div>
|
335
|
+
|
336
|
+
<div id="p62774" class="blockpost roweven">
|
337
|
+
<h2><span><span class="conr">#8 </span><a href="http://forum.textdrive.com/viewtopic.php?pid=62774#p62774">Today 17:03:28</a></span></h2>
|
338
|
+
<div class="box">
|
339
|
+
<div class="inbox">
|
340
|
+
<div class="postleft">
|
341
|
+
<dl>
|
342
|
+
<dt><strong><a href="http://forum.textdrive.com/profile.php?id=2707">jqshenker</a></strong></dt>
|
343
|
+
<dd class="usertitle"><strong>Member</strong></dd>
|
344
|
+
<dd class="postavatar"><img src="not_an_image_files/2707.jfif" alt="" height="60" width="60"></dd>
|
345
|
+
<dd>From: Palo Alto, CA</dd>
|
346
|
+
<dd>Registered: 2005-09-06</dd>
|
347
|
+
<dd>Posts: 422</dd>
|
348
|
+
<dd class="usercontacts"><a href="http://forum.textdrive.com/misc.php?email=2707">E-mail</a> <a href="http://nothingmuch.textdriven.com/">Website</a></dd>
|
349
|
+
</dl>
|
350
|
+
</div>
|
351
|
+
<div class="postright">
|
352
|
+
<h3> Re: Lighttpd says Insufficient memory (case 4)</h3>
|
353
|
+
<div class="postmsg">
|
354
|
+
<p>RMagick
|
355
|
+
does leak memory in some versions (there's a patched version of
|
356
|
+
file_column which resizes via the commandline), but I'm not sure why
|
357
|
+
you can't resize larger images. It doesn't take <strong>that</strong> much memory.</p>
|
358
|
+
|
359
|
+
|
360
|
+
|
361
|
+
</div>
|
362
|
+
<div class="postsignature"><hr><a href="http://soggyslides.textdriven.com/">soggyslides - {abstractisms daily}</a></div>
|
363
|
+
</div>
|
364
|
+
<div class="clearer"></div>
|
365
|
+
<div class="postfootleft"><p>Offline</p></div>
|
366
|
+
<div class="postfootright"><ul><li class="postreport"><a href="http://forum.textdrive.com/misc.php?report=62774">Report</a> | </li><li class="postquote"><a href="http://forum.textdrive.com/post.php?tid=7356&qid=62774">Quote</a></li></ul></div>
|
367
|
+
</div>
|
368
|
+
</div>
|
369
|
+
</div>
|
370
|
+
|
371
|
+
<div id="p62782" class="blockpost rowodd">
|
372
|
+
<h2><span><span class="conr">#9 </span><a href="http://forum.textdrive.com/viewtopic.php?pid=62782#p62782">Today 19:04:21</a></span></h2>
|
373
|
+
<div class="box">
|
374
|
+
<div class="inbox">
|
375
|
+
<div class="postleft">
|
376
|
+
<dl>
|
377
|
+
<dt><strong><a href="http://forum.textdrive.com/profile.php?id=1067">geography</a></strong></dt>
|
378
|
+
<dd class="usertitle"><strong>Member</strong></dd>
|
379
|
+
<dd class="postavatar"></dd>
|
380
|
+
<dd>From: NYC</dd>
|
381
|
+
<dd>Registered: 2005-03-17</dd>
|
382
|
+
<dd>Posts: 10</dd>
|
383
|
+
<dd class="usercontacts"><a href="http://forum.textdrive.com/misc.php?email=1067">E-mail</a> <a href="http://journal.gleepglop.com/">Website</a></dd>
|
384
|
+
</dl>
|
385
|
+
</div>
|
386
|
+
<div class="postright">
|
387
|
+
<h3> Re: Lighttpd says Insufficient memory (case 4)</h3>
|
388
|
+
<div class="postmsg">
|
389
|
+
<p>So what i've learned so far...</p>
|
390
|
+
|
391
|
+
<p>TextDrive has a memory limit.<br>
|
392
|
+
-When using RMagick in a rails app running with fcgi and lighttpd this memory limit is exceeded.<br>
|
393
|
+
-When the memory limit is exceeded the fcgi process is killed (No expcetions caught or anything in Ruby... the process ends)<br>
|
394
|
+
-The problem occurs when writing images to disk (With either File.open or Image.write)<br>
|
395
|
+
-The problem still occurs if I call GC.starts after RMagick calls</p>
|
396
|
+
|
397
|
+
<p>Here is what I don't get...<br>
|
398
|
+
-Why is the memory limit so low (Or why does a simple RMagick call take
|
399
|
+
up so much memory? My dispatch procs take up around 50 megs, I can't
|
400
|
+
imagine that opening a 600k file would come close to using that much
|
401
|
+
memory)<br>
|
402
|
+
-Would putting my RMagick code in a different thread allow me to have more memory at my disposal?</p>
|
403
|
+
|
404
|
+
|
405
|
+
|
406
|
+
</div>
|
407
|
+
</div>
|
408
|
+
<div class="clearer"></div>
|
409
|
+
<div class="postfootleft"><p><strong>Online</strong></p></div>
|
410
|
+
<div class="postfootright"><ul><li class="postreport"><a href="http://forum.textdrive.com/misc.php?report=62782">Report</a> | </li><li class="postdelete"><a href="http://forum.textdrive.com/delete.php?id=62782">Delete</a> | </li><li class="postedit"><a href="http://forum.textdrive.com/edit.php?id=62782">Edit</a> | </li><li class="postquote"><a href="http://forum.textdrive.com/post.php?tid=7356&qid=62782">Quote</a></li></ul></div>
|
411
|
+
</div>
|
412
|
+
</div>
|
413
|
+
</div>
|
414
|
+
|
415
|
+
<div id="p62785" class="blockpost roweven">
|
416
|
+
<h2><span><span class="conr">#10 </span><a href="http://forum.textdrive.com/viewtopic.php?pid=62785#p62785">Today 19:29:11</a></span></h2>
|
417
|
+
<div class="box">
|
418
|
+
<div class="inbox">
|
419
|
+
<div class="postleft">
|
420
|
+
<dl>
|
421
|
+
<dt><strong><a href="http://forum.textdrive.com/profile.php?id=1097">cch</a></strong></dt>
|
422
|
+
<dd class="usertitle"><strong>Member</strong></dd>
|
423
|
+
<dd class="postavatar"></dd>
|
424
|
+
<dd>Registered: 2005-03-21</dd>
|
425
|
+
<dd>Posts: 108</dd>
|
426
|
+
<dd class="usercontacts"><a href="http://forum.textdrive.com/misc.php?email=1097">E-mail</a></dd>
|
427
|
+
</dl>
|
428
|
+
</div>
|
429
|
+
<div class="postright">
|
430
|
+
<h3> Re: Lighttpd says Insufficient memory (case 4)</h3>
|
431
|
+
<div class="postmsg">
|
432
|
+
<p>the memory limit is 100mb.</p>
|
433
|
+
|
434
|
+
<p>watch
|
435
|
+
your process as you make the upload to see how high it goes. also try
|
436
|
+
resizing an image using a standalone (no rails) ruby script and see how
|
437
|
+
much memory it uses this way.</p>
|
438
|
+
|
439
|
+
|
440
|
+
|
441
|
+
</div>
|
442
|
+
</div>
|
443
|
+
<div class="clearer"></div>
|
444
|
+
<div class="postfootleft"><p>Offline</p></div>
|
445
|
+
<div class="postfootright"><ul><li class="postreport"><a href="http://forum.textdrive.com/misc.php?report=62785">Report</a> | </li><li class="postquote"><a href="http://forum.textdrive.com/post.php?tid=7356&qid=62785">Quote</a></li></ul></div>
|
446
|
+
</div>
|
447
|
+
</div>
|
448
|
+
</div>
|
449
|
+
|
450
|
+
<div id="p62796" class="blockpost rowodd">
|
451
|
+
<h2><span><span class="conr">#11 </span><a href="http://forum.textdrive.com/viewtopic.php?pid=62796#p62796">Today 21:13:19</a></span></h2>
|
452
|
+
<div class="box">
|
453
|
+
<div class="inbox">
|
454
|
+
<div class="postleft">
|
455
|
+
<dl>
|
456
|
+
<dt><strong><a href="http://forum.textdrive.com/profile.php?id=1067">geography</a></strong></dt>
|
457
|
+
<dd class="usertitle"><strong>Member</strong></dd>
|
458
|
+
<dd class="postavatar"></dd>
|
459
|
+
<dd>From: NYC</dd>
|
460
|
+
<dd>Registered: 2005-03-17</dd>
|
461
|
+
<dd>Posts: 10</dd>
|
462
|
+
<dd class="usercontacts"><a href="http://forum.textdrive.com/misc.php?email=1067">E-mail</a> <a href="http://journal.gleepglop.com/">Website</a></dd>
|
463
|
+
</dl>
|
464
|
+
</div>
|
465
|
+
<div class="postright">
|
466
|
+
<h3> Re: Lighttpd says Insufficient memory (case 4)</h3>
|
467
|
+
<div class="postmsg">
|
468
|
+
<p>So after some investigation it seems like RMagick is a total memory hog.</p>
|
469
|
+
|
470
|
+
<p>I load a 750k image with this tiny standalone ruby program...</p>
|
471
|
+
|
472
|
+
<p>image = nil<br>
|
473
|
+
open(filepath) do |f|</p>
|
474
|
+
image = Magick::Image.from_blob(f.read).first<br>
|
475
|
+
end<br>
|
476
|
+
image.write("image.jpg")
|
477
|
+
|
478
|
+
<p>Monitoring the mem usage (using top) I get this 8th column is mem usuage</p>
|
479
|
+
<p>#File being downloaded<br>
|
480
|
+
7198 ruby 7.6% 0:04.83 2 15 60 3.37M+ 2.65M 4.88M+ 44.5M+<br>
|
481
|
+
7198 ruby 14.4% 0:05.01 2 15 68 18.1M+ 2.73M+ 20.0M+ 80.9M+<br>
|
482
|
+
7198 ruby 35.0% 0:05.49 2 15 67 41.8M+ 2.73M 43.7M+ 80.8M-</p>
|
483
|
+
<p>#File being loading into Magick::Image<br>
|
484
|
+
7198 ruby 0.1% 0:05.49 2 15 67 41.8M 2.73M 43.7M 80.8M-<br>
|
485
|
+
7198 ruby 0.1% 0:05.49 2 15 67 41.8M 2.73M 43.7M 80.8M-</p>
|
486
|
+
<p>#File being written to disk<br>
|
487
|
+
7198 ruby 3.4% 0:05.53 2 15 72 43.4M+ 2.73M 45.3M+ 122M+<br>
|
488
|
+
7198 ruby 55.9% 0:06.29 2 15 72 61.1M+ 2.73M 63.0M+ 122M <br>
|
489
|
+
7198 ruby 48.4% 0:06.93 2 15 72 76.1M+ 2.73M 78.1M+ 122M <br>
|
490
|
+
7198 ruby 48.2% 0:07.55 2 15 67 42.5M- 2.73M 44.4M- 80.8M-</p>
|
491
|
+
|
492
|
+
<p>So
|
493
|
+
I guess the moral is RMagick eats up a ton of memory. I can't really
|
494
|
+
see anyway around this problem though, maybe using the command line
|
495
|
+
would eat up less memory (which is what I'll try next)</p>
|
496
|
+
|
497
|
+
|
498
|
+
|
499
|
+
<p class="postedit"><em>Last edited by geography (Today 21:29:17)</em></p>
|
500
|
+
</div>
|
501
|
+
</div>
|
502
|
+
<div class="clearer"></div>
|
503
|
+
<div class="postfootleft"><p><strong>Online</strong></p></div>
|
504
|
+
<div class="postfootright"><ul><li class="postreport"><a href="http://forum.textdrive.com/misc.php?report=62796">Report</a> | </li><li class="postdelete"><a href="http://forum.textdrive.com/delete.php?id=62796">Delete</a> | </li><li class="postedit"><a href="http://forum.textdrive.com/edit.php?id=62796">Edit</a> | </li><li class="postquote"><a href="http://forum.textdrive.com/post.php?tid=7356&qid=62796">Quote</a></li></ul></div>
|
505
|
+
</div>
|
506
|
+
</div>
|
507
|
+
</div>
|
508
|
+
|
509
|
+
<div id="p62801" class="blockpost roweven">
|
510
|
+
<h2><span><span class="conr">#12 </span><a href="http://forum.textdrive.com/viewtopic.php?pid=62801#p62801">Today 21:55:36</a></span></h2>
|
511
|
+
<div class="box">
|
512
|
+
<div class="inbox">
|
513
|
+
<div class="postleft">
|
514
|
+
<dl>
|
515
|
+
<dt><strong><a href="http://forum.textdrive.com/profile.php?id=1097">cch</a></strong></dt>
|
516
|
+
<dd class="usertitle"><strong>Member</strong></dd>
|
517
|
+
<dd class="postavatar"></dd>
|
518
|
+
<dd>Registered: 2005-03-21</dd>
|
519
|
+
<dd>Posts: 108</dd>
|
520
|
+
<dd class="usercontacts"><a href="http://forum.textdrive.com/misc.php?email=1097">E-mail</a></dd>
|
521
|
+
</dl>
|
522
|
+
</div>
|
523
|
+
<div class="postright">
|
524
|
+
<h3> Re: Lighttpd says Insufficient memory (case 4)</h3>
|
525
|
+
<div class="postmsg">
|
526
|
+
<p>Yea, now you have to know whether it's RMagick specifically, or ImageMagick itself that is a memory hog.</p>
|
527
|
+
|
528
|
+
<p>I
|
529
|
+
suppose it goes memory hungry because it expands a full uncompressed
|
530
|
+
24bit bitmap to memory, and that's innevitably large. (entirely
|
531
|
+
uninformed hunch)</p>
|
532
|
+
|
533
|
+
<p>There's ruby-GD as an alternative, but it
|
534
|
+
doesn't look nearly as nice, and I've never used it, and I don't know
|
535
|
+
if it'd be more or less of a hog.</p>
|
536
|
+
|
537
|
+
|
538
|
+
|
539
|
+
<p class="postedit"><em>Last edited by cch (Today 21:56:17)</em></p>
|
540
|
+
</div>
|
541
|
+
</div>
|
542
|
+
<div class="clearer"></div>
|
543
|
+
<div class="postfootleft"><p>Offline</p></div>
|
544
|
+
<div class="postfootright"><ul><li class="postreport"><a href="http://forum.textdrive.com/misc.php?report=62801">Report</a> | </li><li class="postquote"><a href="http://forum.textdrive.com/post.php?tid=7356&qid=62801">Quote</a></li></ul></div>
|
545
|
+
</div>
|
546
|
+
</div>
|
547
|
+
</div>
|
548
|
+
|
549
|
+
<div class="postlinksb">
|
550
|
+
<div class="inbox">
|
551
|
+
<p class="postlink conr"><a href="http://forum.textdrive.com/post.php?tid=7356">Post reply</a></p>
|
552
|
+
<p class="pagelink conl">Pages: <strong>1</strong></p>
|
553
|
+
<ul><li><a href="http://forum.textdrive.com/index.php">Index</a></li><li> » <a href="http://forum.textdrive.com/viewforum.php?id=4">Troubleshooting</a></li><li> » Lighttpd says Insufficient memory (case 4)</li></ul>
|
554
|
+
<p class="subscribelink clearb">You are currently subscribed to this topic - <a href="http://forum.textdrive.com/misc.php?unsubscribe=7356">Unsubscribe</a></p>
|
555
|
+
</div>
|
556
|
+
</div>
|
557
|
+
|
558
|
+
<div class="blockform">
|
559
|
+
<h2><span>Quick post</span></h2>
|
560
|
+
<div class="box">
|
561
|
+
<form method="post" action="post.php?tid=7356" onsubmit="this.submit.disabled=true;if(process_form(this)){return true;}else{this.submit.disabled=false;return false;}">
|
562
|
+
<div class="inform">
|
563
|
+
<fieldset>
|
564
|
+
<legend>Write your message and submit <span style="color: red; text-decoration: underline;">keeping in mind that this is not an official support forum.</span></legend>
|
565
|
+
<div class="infldset txtarea">
|
566
|
+
<input name="form_sent" value="1" type="hidden">
|
567
|
+
<input name="form_user" value="geography" type="hidden">
|
568
|
+
<label><textarea name="req_message" rows="7" cols="75" tabindex="1"></textarea></label>
|
569
|
+
<ul class="bblinks">
|
570
|
+
<li><a href="http://forum.textdrive.com/help.php#bbcode" onclick="window.open(this.href); return false;">BBCode</a>: on</li>
|
571
|
+
<li><a href="http://forum.textdrive.com/help.php#img" onclick="window.open(this.href); return false;">[img] tag</a>: on</li>
|
572
|
+
<li><a href="http://forum.textdrive.com/help.php#smilies" onclick="window.open(this.href); return false;">Smilies</a>: off</li>
|
573
|
+
</ul>
|
574
|
+
</div>
|
575
|
+
</fieldset>
|
576
|
+
</div>
|
577
|
+
<p><input name="submit" tabindex="2" value="Submit" accesskey="s" type="submit"></p>
|
578
|
+
</form>
|
579
|
+
</div>
|
580
|
+
</div>
|
581
|
+
|
582
|
+
<div id="brdfooter" class="block">
|
583
|
+
<h2><span>Board footer</span></h2>
|
584
|
+
<div class="box">
|
585
|
+
<div class="inbox">
|
586
|
+
|
587
|
+
<div class="conl">
|
588
|
+
<form id="qjump" method="get" action="viewforum.php">
|
589
|
+
<div><label>Jump to
|
590
|
+
<br><select name="id" onchange="window.location=('viewforum.php?id='+this.options[this.selectedIndex].value)"><optgroup label="TextDrive Hosting"><option value="2">Announcements</option><option value="33">Questions and Stuff</option><option value="11">Why Host With TXD?</option><option value="1">Getting Started</option><option value="3">How Do I...?</option><option value="4" selected="selected">Troubleshooting</option><option value="15">SPAM and Security</option><option value="5">Coding in General</option><option value="16">Localhostin'</option><option value="31">Look What I Did Dammit</option><option value="6">TextDrivel</option><option value="8">Archives</option><option value="32">Designing yourself into a corner</option></optgroup><optgroup label="TextDrive Internationale"><option value="23">TextDrive En Español</option><option value="24">TextDrive en Français</option></optgroup><optgroup label="Applications (and their developers) on TextDrive"><option value="7">Textpattern</option><option value="9">RubyOnRails</option><option value="10">Instiki</option><option value="12">Photostack</option><option value="13">PunBB</option><option value="14">WordPress</option><option value="17">Epilog</option><option value="20">sIFR</option><option value="22">Subversion</option><option value="26">Lightpress</option><option value="27">Loudblog</option><option value="25">Strongspace</option><option value="29">RailsAppHosting</option><option value="35">Anemone</option><option value="28">Django</option><option value="30">TurboGears</option><option value="34">Templation</option></optgroup></select>
|
591
|
+
<input value=" Go " accesskey="g" type="submit">
|
592
|
+
</label></div>
|
593
|
+
</form>
|
594
|
+
</div>
|
595
|
+
<p class="conr">Powered by <a href="http://www.punbb.org/">PunBB</a><br>© Copyright 2002–2005 Rickard Andersson</p>
|
596
|
+
<div class="clearer"></div>
|
597
|
+
</div>
|
598
|
+
</div>
|
599
|
+
</div>
|
600
|
+
|
601
|
+
</div>
|
602
|
+
</div>
|
603
|
+
|
604
|
+
</body></html>
|
data/test/simple.gif
ADDED
Binary file
|
metadata
ADDED
@@ -0,0 +1,51 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
rubygems_version: 0.8.11
|
3
|
+
specification_version: 1
|
4
|
+
name: mini_magick
|
5
|
+
version: !ruby/object:Gem::Version
|
6
|
+
version: 1.0.1
|
7
|
+
date: 2006-02-25 00:00:00 -05:00
|
8
|
+
summary: Manipulate images with minimal use of memory.
|
9
|
+
require_paths:
|
10
|
+
- lib
|
11
|
+
email: probablycorey@gmail.com
|
12
|
+
homepage: http://journal.gleepglop.com
|
13
|
+
rubyforge_project: mini_magick
|
14
|
+
description: Uses command-line ImageMagick tools to resize, rotate, and mogrify images.
|
15
|
+
autorequire: mini_magick
|
16
|
+
default_executable:
|
17
|
+
bindir: bin
|
18
|
+
has_rdoc: true
|
19
|
+
required_ruby_version: !ruby/object:Gem::Version::Requirement
|
20
|
+
requirements:
|
21
|
+
- - ">"
|
22
|
+
- !ruby/object:Gem::Version
|
23
|
+
version: 0.0.0
|
24
|
+
version:
|
25
|
+
platform: ruby
|
26
|
+
signing_key:
|
27
|
+
cert_chain:
|
28
|
+
authors:
|
29
|
+
- Corey Johnson
|
30
|
+
files:
|
31
|
+
- Rakefile
|
32
|
+
- README
|
33
|
+
- MIT-LICENSE
|
34
|
+
- lib/mini_magick.rb
|
35
|
+
- test/mini_magick_test.rb
|
36
|
+
- test/not_an_image.php
|
37
|
+
- test/simple.gif
|
38
|
+
test_files: []
|
39
|
+
|
40
|
+
rdoc_options: []
|
41
|
+
|
42
|
+
extra_rdoc_files: []
|
43
|
+
|
44
|
+
executables: []
|
45
|
+
|
46
|
+
extensions: []
|
47
|
+
|
48
|
+
requirements:
|
49
|
+
- none
|
50
|
+
dependencies: []
|
51
|
+
|