我几天来一直在抨击我。最近,我的图片上传器已停止正常工作。我已经研究了几种可能性,但没有一种建议的解决方案适用于我的情况。
错误消息是:
#<Paperclip::Errors::NotIdentifiedByImageMagickError:Paperclip::Errors::NotIdentifiedByImageMagickError>
以下是详细信息:
development.rb
包含适当的路径(我使用which identify
验证了它是正确的)
Paperclip.options[:command_path] = "/usr/local/bin/"
Gemfile.lock
(相关部分)
paperclip (3.4.1)
activemodel (>= 3.0.0)
activerecord (>= 3.0.0)
activesupport (>= 3.0.0)
cocaine (~> 0.5.0)
MODEL(我正在更新教室对象,但图片位于位置模型中。(Classroom has_one :location, :as => :locatable)
模型location.rb
class Location < ActiveRecord::Base
## Paperclip method for uploading location images
has_attached_file :picture, :styles => {:show => "1200x500#", :medium => "300x300#", :thumb => "100x100>"}, :convert_options => {:show => "-gravity center"}
has_attached_file :building_sign, :styles => { :show => ["1200x500#", :jpg], :medium => ["300x300#", :jpg], :thumb => ["100x100#", :jpg] }, :convert_options => {:show => "-gravity center"}
belongs_to :locatable, :polymorphic => true
belongs_to :location_type
validates :name, :presence => true
validates :latitude, :presence => true,
:length => {:within => 9..18},
:numericality => true
validates :longitude, :presence => true,
:length => {:within => 9..18},
:numericality => true
end
Controller classrooms_controller.rb
def update
@classroom = Classroom.find_by_facility_code_heprod(params[:id].upcase)
respond_to do |format|
if @classroom.update_attributes(params[:classroom])
format.html { redirect_to(@classroom, :notice => 'Classroom was successfully updated.') }
format.xml { head :ok }
else
format.html { render :action => "edit" }
format.xml { render :xml => @classroom.errors, :status => :unprocessable_entity }
end
end
end
我尝试了什么。
我尝试过宝石版本的变体,包括
# variation 1
gem 'paperclip', '~> 2.8.0'
gem "cocaine", "=0.3.2"
# variation 2
gem "paperclip", "~> 3.4.0"
gem "cocaine", "= 0.4"
# variation 3 (which is what is reflected in the included Gemfile.lock info above).
gem "paperclip", "~> 3.4.0"
如果删除缩放,
:styles => {:show => "1200x500#", :medium => "300x300#", :thumb => "100x100>"},
:convert_options => {:show => "-gravity center"}
上传有效,但我需要扩展; - )
有人能看到我失踪的东西吗?
答案 0 :(得分:21)
我们遇到了这个问题,结果却是没有安装ghostscript的问题。我接受了Scott Cornwell的建议并删除了错误的沉默,然后确定转换失败,因为ghostscript不可用。
brew install ghostscript
为我们解决了这个问题。
答案 1 :(得分:10)
虽然我的服务器在Linux上,但我遇到了同样的问题。不能告诉你究竟该怎么做,因为我没有Mac测试,但希望这能指出你正确的方向。
这对我有用ImageMagick 6.8.5-5,Paperclip 3.4.2,最新版本的可卡因,Rails 3.2.13:
我进入了Paperclip gem中的geometry_detector_factory.rb并注释了识别调用周围的2行:(这一步没有必要,只是解释我为确定问题所做的工作)
#silence_stream(STDERR) do
Paperclip.run("identify", "-format '%wx%h,%[exif:orientation]' :file", :file => "#{path}[0]")
#end
以及相应的“结束”声明。这使我在运行“identify”命令时可以在命令行上看到错误。
基本上错误说:“此图像格式没有解码代理”
您可能会查找该错误并将其弄清楚,但基本上我所做的是转到usr / local / bin并运行:(也没必要,除非您想查看已安装的内容)
convert -list configure
并查找DELEGATES行。我有另一台运行ImageMagick的Linux服务器,在比较两者后,我意识到新服务器只安装了2个代理。我能够跑:
yum install ImageMagick-devel
然后使用make重新编译ImageMagick,make install并运行。
您也可以在ImageMagick网站上手动找到代理人并逐个安装,但该库几乎涵盖了我。
调试ImageMagick?是不是没有人有时间!
答案 2 :(得分:6)
如果我的窗口环境出现问题,请使用paperclip 3.5.2,可卡因0.5.3和ImageMagic 6.8.8。
解决方案是添加:
Paperclip.options[:command_path] = 'C:\Program Files\ImageMagick-6.8.8-Q16'
到config / environment / development.rb
答案 3 :(得分:3)
我有类似的问题,但旧的PaperClip(3.0.2)。
在我的情况下,我修复了:
gem 'cocaine', '0.3.2'
答案 4 :(得分:1)
重新安装libtool brew install libtool
为我工作。
答案 5 :(得分:1)
我刚刚解决了这个问题。 brew打电话给Cellar,/ usr / local / Cellar 验证你是否有两个ImageMagick,我有一个名为ImageMagick-Ruby182,所以,如果你有它运行brew卸载ImageMagick-Ruby182,还有正常的imagemagick,并重新安装图像魔法。
答案 6 :(得分:0)
请更新回形针宝石和可卡因宝石的版本。 设置PaperClip版本:3.4.1 设置可卡因版本:0.5。
我遇到了同样的问题,我的问题已经出现在paperclip gem github问题
中答案 7 :(得分:0)
您已经提到过您尝试升级ImageMagick,但我遇到了同样的问题并升级到ImageMagick 6.8.0-10 2013-03-03
为我修复了它。
答案 8 :(得分:0)
与image_magic有同样的问题,它在生产中破坏了我们的回形针功能,但没有在开发中(很奇怪,我知道)。 即使从我们的gemfile和Gemfile.lock本地删除imagemagick(运行bundle install和所有这些东西)然后在heroku上部署回生产,错误仍然存在于生产中! (很奇怪,我知道)。
最终做的诀窍是:
$ heroku repo:purge_cache -a myAppName
(摘自:https://github.com/heroku/heroku-repo#purge_cache)
当您部署应用程序时,Heroku会缓存一些内容,例如您的资产和已安装的gem,以加快部署速度。 虽然这是一个很棒的功能,但它有时会产生副作用,在这种情况下,似乎有关于imagemagick gem的东西被“卡住”在生产缓存中,这就是为什么清除为我们解决了问题(因为在清除之后,您的应用将在下次部署时从头开始重建)
答案 9 :(得分:0)
我有同样的问题,当我配置动态链接器运行时绑定以使用ldconfig command创建必要的链接并缓存到最新的共享库时,我解决了它。
所以你需要使用以下命令:
sudo ldconfig /usr/local/lib
实际上,我建议使用how-to-install-image-magick-and-setup-paperclip的步骤重新安装imagemagick。
答案 10 :(得分:0)
仅供记录:
public static void copyAndResizePhoto(Context context, Uri srcUri, File destFile) {
String[] orientationColumn = {MediaStore.Images.Media.ORIENTATION};
Cursor cursor = context.getContentResolver().query(srcUri, orientationColumn, null, null, null);
int orientation = -1;
if (cursor != null && cursor.moveToFirst()) {
orientation = cursor.getInt(cursor.getColumnIndex(orientationColumn[0]));
}
if (cursor != null)
cursor.close();
}