确定内容类型时出现回形针错误:Rails 3.2.1 中的 Cocaine::CommandNotFoundError [英] paperclip Error while determining content type: Cocaine::CommandNotFoundError in Rails 3.2.1

查看:55
本文介绍了确定内容类型时出现回形针错误:Rails 3.2.1 中的 Cocaine::CommandNotFoundError的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我尝试使用此处的代码上传和使用 Paperclip 裁剪图像.我可以上传图像并且图像也被裁剪但没有选择区域.控制台给出以下错误:

[paperclip] 确定内容类型时出错:Cocaine::CommandNotFoundError

我尝试过其他文章中给出的解决方案,例如 thisthis,但都没有解决这个问题.

欢迎提出任何其他建议.

注意:我在 Windows 7 上工作.安装的宝石是:

gem 'rails', '3.2.1'

宝石'mysql2'

宝石'回形针'

宝石 'mini_magick'

User.rb

需要 'mini_magick'类用户{:thumb =>"75x75#",:small =>"150x150>"}attr_accessible :name,:email,:avatar,:crop_x,:crop_y,:crop_w,:crop_hhas_attached_file :avatar,:styles =>{:thumb =>"75x75>",:small="100x100#", :large="500x500>"}#,:processors =>[:农作物]attr_accessor :processing, :crop_x,:crop_y,:crop_w,:crop_hafter_update :reprocess_avatar,:if=>:cropping?定义裁剪?!crop_x.blank?&&!crop_y.blank?&&!crop_w.blank?&&!crop_h.blank?结尾def avatar_geometry(style = :original)@geometry ||= {}@geometry[style] ||= Paperclip::Geometry.from_file(avatar.path(style))结尾私人的def reprocess_avatar# 如果用户没有更新照片,不要裁剪# ...或者如果照片已经在处理中返回除非(裁剪?&& !处理)self.processing = trueavatar.reprocess!self.processing = false结尾结尾

users_controller.rb

 def 创建@user = User.new(params[:user])如果@user.save如果参数[:user][:avatar].blank?flash[:notice] = "成功创建用户."重定向到@user别的渲染:动作=>庄稼"结尾别的渲染:动作=>'新的'结尾结尾# 放置/users/1# PUT/users/1.json定义更新@user = User.find(params[:id])如果@user.update_attributes(params[:user])如果参数[:user][:avatar].blank?flash[:notice] = "成功更新用户."重定向到@user别的渲染:动作=>庄稼"结尾别的渲染:动作=>'编辑'结尾结尾

crop.html.erb

<% content_for(:head) do %><link rel="stylesheet" href="../stylesheets/jquery.Jcrop.css" type="text/css"/><link rel="stylesheet" href="../stylesheets/jquery.Jcrop.min.css" type="text/css"/><script src="../javascripts/jquery.min.js"></script><script src="../javascripts/jquery.Jcrop.js"></script><script type="text/javascript " charset="utf-8">$(函数(){$('#cropbox').Jcrop({onChange:update_crop,onSelect: update_crop,setSelect: [0, 0, 500, 500],纵横比:1});});功能更新作物(坐标){var rx = 100/coords.w;var ry = 100/coords.h;$('#preview').css({宽度:Math.round(rx * <%= @user.avatar_geometry(:large).width %>) + 'px',高度:Math.round(ry * <%= @user.avatar_geometry(:large).height %>) + 'px',marginLeft: '-' + Math.round(rx * coords.x) + 'px',marginTop: '-' + Math.round(ry * coords.y) + 'px'});var ratio = <%= @user.avatar_geometry(:original).width %>/<%= @user.avatar_geometry(:large).width %>;$("#crop_x").val(Math.round(coords.x * ratio));$("#crop_y").val(Math.round(coords.y * ratio));$("#crop_w").val(Math.round(coords.w * ratio));$("#crop_h").val(Math.round(coords.h * ratio));}<%结束%><%= image_tag @user.avatar.url(:large), :id =>裁剪框"%><h4>预览:</h4><div style="width:100px; height:100px; overflow:hidden"><%= image_tag @user.avatar.url(:large), :id =>预览"%>

<% form_for @user do |f|%><% for attribute in [:crop_x, :crop_y, :crop_w, :crop_h] %><%= f.hidden_​​field 属性,:id =>属性%><%结束%><p><%= f.submit "Crop"%></p><%结束%>

config/development.rb

 Paperclip.options[:swallow_stderr] = falsePaperclip.options[:command_path] = "C:/Program Files/ImageMagick-6.8.8-Q8/"

解决方案

这很可能是因为 Paperclip 4 使用 file 命令来确定文件的内容类型.该命令在普通 Windows 计算机上不可用.

下载 file 命令的 Win32 版本并将其放在搜索路径中的某个位置.(我使用的是 gnuwin32)或者您可以使用 3.x 版本的 Paperclip.

I tried to use the code given here to upload and crop images using Paperclip.I am able to upload image and also the image is cropped but without selection area. The console gives the following error :

[paperclip] Error while determining content type: Cocaine::CommandNotFoundError

I have tried solutions given on other articles of SO like this and this, but none of them solved this problem.

Any other suggestions are most welcomed.

NOTE : I am working on Windows 7. Gems installed are :

gem 'rails', '3.2.1'

gem 'mysql2'

gem 'paperclip'

gem 'mini_magick'

User.rb

require 'mini_magick'
class User < ActiveRecord::Base
#Paperclip.options[:command_path] = "C:\Program Files\ImageMagick-6.8.8-Q8"
#  The foll line works
#  has_attached_file :avatar,:styles => {:thumb => "75x75#",:small => "150x150>"} 

  attr_accessible :name,:email,:avatar,:crop_x,:crop_y,:crop_w,:crop_h
  has_attached_file :avatar,:styles => {:thumb => "75x75>",:small=>"100x100#", :large=>"500x500>"}#,:processors => [:cropper]
  attr_accessor :processing, :crop_x,:crop_y,:crop_w,:crop_h
  after_update :reprocess_avatar,:if=>:cropping?                       

  def cropping?
    !crop_x.blank? && !crop_y.blank? && !crop_w.blank? && !crop_h.blank?
  end

  def avatar_geometry(style = :original)
    @geometry ||= {}
    @geometry[style] ||= Paperclip::Geometry.from_file(avatar.path(style))
  end

  private

  def reprocess_avatar
    # don't crop if the user isn't updating the photo
    # ...or if the photo is already being processed
     return unless (cropping? && !processing)
     self.processing = true
     avatar.reprocess!
     self.processing = false
  end   

end

users_controller.rb

 def create
  @user = User.new(params[:user])
  if @user.save
    if params[:user][:avatar].blank?
      flash[:notice] = "Successfully created user."
      redirect_to @user
    else
      render :action => "crop"
    end
  else
    render :action => 'new'
  end
end


  # PUT /users/1
  # PUT /users/1.json
  def update
    @user = User.find(params[:id])
  if @user.update_attributes(params[:user])
    if params[:user][:avatar].blank?
      flash[:notice] = "Successfully updated user."
      redirect_to @user
    else
      render :action => "crop"
    end
  else
    render :action => 'edit'
  end

 end

crop.html.erb

<% content_for(:head) do %>

<link rel="stylesheet" href="../stylesheets/jquery.Jcrop.css" type="text/css" />
<link rel="stylesheet" href="../stylesheets/jquery.Jcrop.min.css" type="text/css" />
<script src="../javascripts/jquery.min.js"></script>
<script src="../javascripts/jquery.Jcrop.js"></script>

<script type="text/javascript " charset="utf-8">
$(function() {
  $('#cropbox').Jcrop({
    onChange: update_crop,
    onSelect: update_crop,
    setSelect: [0, 0, 500, 500],
    aspectRatio: 1
  });
});

function update_crop(coords) {
  var rx = 100/coords.w;
  var ry = 100/coords.h;
  $('#preview').css({
    width: Math.round(rx * <%= @user.avatar_geometry(:large).width %>) + 'px',
    height: Math.round(ry * <%= @user.avatar_geometry(:large).height %>) + 'px',
    marginLeft: '-' + Math.round(rx * coords.x) + 'px',
    marginTop: '-' + Math.round(ry * coords.y) + 'px'
  });
  var ratio = <%= @user.avatar_geometry(:original).width %> / <%= @user.avatar_geometry(:large).width %>;
  $("#crop_x").val(Math.round(coords.x * ratio));
  $("#crop_y").val(Math.round(coords.y * ratio));
  $("#crop_w").val(Math.round(coords.w * ratio));
  $("#crop_h").val(Math.round(coords.h * ratio));
}
</script>
<% end %>

<%= image_tag @user.avatar.url(:large), :id => "cropbox" %>

<h4>Preview:</h4>
<div style="width:100px; height:100px; overflow:hidden">
  <%= image_tag @user.avatar.url(:large), :id => "preview" %>
</div>

<% form_for @user do |f| %>
  <% for attribute in [:crop_x, :crop_y, :crop_w, :crop_h] %>
    <%= f.hidden_field attribute, :id => attribute %>
  <% end %>
  <p><%= f.submit "Crop" %></p>
<% end %>

config/development.rb

 Paperclip.options[:swallow_stderr] = false
  Paperclip.options[:command_path] = "C:/Program Files/ImageMagick-6.8.8-Q8/"

解决方案

This is most likely because Paperclip 4 uses the file command to determine the content type of a file. That command is not available on a normal Windows machine.

Either download a Win32 version of the file command and put it somewhere in the search path. (I'm using gnuwin32) Alternatively you can use the 3.x version of Paperclip.

这篇关于确定内容类型时出现回形针错误:Rails 3.2.1 中的 Cocaine::CommandNotFoundError的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆