Rails Paper Clip上传不起作用...没有错误抛出,回滚事务(Rails Paper Clip upload not working… No error thrown, rolls back transaction)
编辑:我设法让它开始抛出错误,通过改变模型到这个:
class User < ApplicationRecord has_secure_password has_attached_file :avatar, :path => ":rails_root/public/system/:attachment/:id/:basename_:style.:extension", :url => "/system/:attachment/:id/:basename_:style.:extension", :styles => { :thumb => ['100x100#', :jpg, :quality => 70], :preview => ['480x480#', :jpg, :quality => 70], :large => ['600>', :jpg, :quality => 70], :retina => ['1200>', :jpg, :quality => 30] }, :convert_options => { :thumb => '-set colorspace sRGB -strip', :preview => '-set colorspace sRGB -strip', :large => '-set colorspace sRGB -strip', :retina => '-set colorspace sRGB -strip -sharpen 0x0.5' } validates_attachment :avatar, :presence => true, :size => { :in => 0..10.megabytes }, :content_type => { :content_type => /^image\/(jpeg|png|gif|tiff)$/ } belongs_to :leitung def admin? self.role == "Admin" end def al? self.role == "Al" end end
控制台现在看起来像这样:
Started POST "/leiter/new" for 127.0.0.1 at 2017-01-01 17:11:59 +0000 Processing by Leiter::UsersController#create as HTML Parameters: {"utf8"=>"✓", "authenticity_token"=>"2z3H8rWo2TLADJtx3kWiCufulyLSBzLLCrxLGaLFH9BWOlGtMZ7BuPFCte8cEY5fC6yFVVggbi6vhESWLFFlRA==", "user"=>{"first_name"=>"asdf", "last_name"=>"asdf", "pfadi_name"=>"asdf", "email"=>"asdf@asdf.asdf", "password"=>"[FILTERED]", "password_confirmation"=>"[FILTERED]", "leitung_id"=>"1", "role"=>"asdf", "avatar"=>#<ActionDispatch::Http::UploadedFile:0x007feb301d8058 @tempfile=#<Tempfile:/tmp/RackMultipart20170101-6509-1yifkdk.jpg>, @original_filename="nobody_m.original.jpg", @content_type="image/jpeg", @headers="Content-Disposition: form-data; name=\"user[avatar]\"; filename=\"nobody_m.original.jpg\"\r\nContent-Type: image/jpeg\r\n">}, "commit"=>"Create an account"} User Load (0.1ms) SELECT "users".* FROM "users" WHERE "users"."id" = ? LIMIT ? [["id", 3], ["LIMIT", 1]] Command :: file -b --mime '/tmp/3068f4f020f8c43d300b1e06b58b829b20170101-6509-tn2f1u.jpg' Command :: identify -format '%wx%h,%[exif:orientation]' '/tmp/3068f4f020f8c43d300b1e06b58b829b20170101-6509-q2rz7h.jpg[0]' 2>/dev/null [paperclip] An error was received while processing: #<Paperclip::Errors::NotIdentifiedByImageMagickError: Paperclip::Errors::NotIdentifiedByImageMagickError> Command :: identify -format '%wx%h,%[exif:orientation]' '/tmp/3068f4f020f8c43d300b1e06b58b829b20170101-6509-q2rz7h.jpg[0]' 2>/dev/null [paperclip] An error was received while processing: #<Paperclip::Errors::NotIdentifiedByImageMagickError: Paperclip::Errors::NotIdentifiedByImageMagickError> Command :: identify -format '%wx%h,%[exif:orientation]' '/tmp/3068f4f020f8c43d300b1e06b58b829b20170101-6509-q2rz7h.jpg[0]' 2>/dev/null [paperclip] An error was received while processing: #<Paperclip::Errors::NotIdentifiedByImageMagickError: Paperclip::Errors::NotIdentifiedByImageMagickError> Command :: identify -format '%wx%h,%[exif:orientation]' '/tmp/3068f4f020f8c43d300b1e06b58b829b20170101-6509-q2rz7h.jpg[0]' 2>/dev/null [paperclip] An error was received while processing: #<Paperclip::Errors::NotIdentifiedByImageMagickError: Paperclip::Errors::NotIdentifiedByImageMagickError> (0.1ms) begin transaction Command :: file -b --mime '/tmp/3068f4f020f8c43d300b1e06b58b829b20170101-6509-1p20xan.jpg' Leitung Load (0.2ms) SELECT "leitungen".* FROM "leitungen" WHERE "leitungen"."id" = ? LIMIT ? [["id", 1], ["LIMIT", 1]] (0.0ms) rollback transaction Redirected to http://localhost:3000/leiter/new Completed 302 Found in 136ms (ActiveRecord: 0.4ms)
但是,对这个问题的常见解决方法是将development.rb文件设置为这个不起作用:
Paperclip.options[:command_path] = "/usr/local/bin/"
(开始的OP :)我正在设置回形针(与ImageMagick),以便我的应用程序上的用户可以上传他们的帐户的头像。 头像应该保存在本地服务器上(说我的电脑,因为应用程序目前正在开发中)。 我按照GitHub上的文档来设置回形针。 一切似乎都在努力......直到我尝试实际上传图像。 提交后(在这种情况下,编辑现有用户添加图像,但同样的事情发生在创建新用户时),它不会抛出错误或任何东西,它只是重新加载页面并灰色提交按钮。 以下消息出现在控制台中:
Started PUT "/leiter/edit" for 127.0.0.1 at 2016-12-31 18:33:19 +0000 ActiveRecord::SchemaMigration Load (0.1ms) SELECT "schema_migrations".* FROM "schema_migrations" Processing by Leiter::UsersController#update as HTML Parameters: {"utf8"=>"✓", "authenticity_token"=>"RjjDgMQESgZ/9DVXTWoTvJDitAmYXqfMyVJJyKpXDsp3hE0dejJ6erMlV+wsFEH9bFlz7ZsvBlgPO63o8PkpYw==", "user"=>{"first_name"=>"Admin", "last_name"=>"Admin", "pfadi_name"=>"Admin", "email"=>"admin@application.com", "leitung_id"=>"6", "role"=>"Admin", "avatar"=>#<ActionDispatch::Http::UploadedFile:0x00000003671238 @tempfile=#<Tempfile:/tmp/RackMultipart20161231-3455-mekx7p.jpg>, @original_filename="nobody_m.original.jpg", @content_type="image/jpeg", @headers="Content-Disposition: form-data; name=\"user[avatar]\"; filename=\"nobody_m.original.jpg\"\r\nContent-Type: image/jpeg\r\n">}, "commit"=>"Speichern"} User Load (0.2ms) SELECT "users".* FROM "users" WHERE "users"."id" = ? LIMIT ? [["id", 1], ["LIMIT", 1]] (0.1ms) begin transaction Command :: PATH=/usr/local/bin/:$PATH; file -b --mime '/tmp/3068f4f020f8c43d300b1e06b58b829b20161231-3455-1vvcs8q.jpg' Command :: PATH=/usr/local/bin/:$PATH; file -b --mime '/tmp/3068f4f020f8c43d300b1e06b58b829b20161231-3455-1cldo2f.jpg' Leitung Load (0.2ms) SELECT "leitungen".* FROM "leitungen" WHERE "leitungen"."id" = ? LIMIT ? [["id", 6], ["LIMIT", 1]] (0.1ms) rollback transaction No template found for Leiter::UsersController#update, rendering head :no_content Completed 204 No Content in 81ms (ActiveRecord: 1.4ms)
在视图中,图像应该出现的任何位置,它表示丢失。 有趣的是,如果我不上传图片,它可以让我创建和更新用户,即使我有参数中需要的图片。 至于为什么会发生这种情况,我绝对无能为力。 如果有帮助,这里是我的用户模型,我的控制器等:
用户模型:
class User < ApplicationRecord has_secure_password has_attached_file :avatar, styles: { medium: "300x300>", thumb: "100x100>" }, default_url: "/images/:style/missing.png" validates_attachment_content_type :avatar, :content_type => ["avatar/jpg", "avatar/jpeg", "avatar/png", "avatar/gif"] belongs_to :leitung def admin? self.role == "Admin" end def al? self.role == "Al" end end
用户控制器:
class Leiter::UsersController < ApplicationController def new @newuser = User.new end def edit @user = User.find(session[:user_id]) end def update @user = User.find(session[:user_id]) if @user.update_attributes(user_params) then redirect_to '/leiter' end end def create @user = User.new(user_params) if @user.save redirect_to '/leiter' else redirect_to '/' end end private def user_params params.require(:user).permit(:first_name, :last_name, :pfadi_name, :email, :password, :password_confirmation, :leitung_id, :role, :avatar) end end
查看更新用户:
<%= simple_form_for @user, url: {action: "edit"}, html: { method: :put } do |f| %> <%= f.text_field :first_name, :placeholder => "First name" %><br> <%= f.text_field :last_name, :placeholder => "Last name" %><br> <%= f.text_field :pfadi_name, :placeholder => "Pfadi name" %><br> <%= f.email_field :email, :placeholder => "Email" %><br> <%= f.association :leitung, :placeholder => "Leitung" %><br> <%= f.text_field :role, :placeholder => "Rolle" %><br> <%= f.input :avatar, as: :file %> <%= f.submit "Speichern", class: "btn-submit" %> <% end %>
如果您需要更多信息,我可以提供。 感谢您的帮助,我确信我犯了一些小错误,但我找不到它......我是新手,但迄今为止它非常有趣!
编辑:
gem 'rails', '~> 5.0.0', '>= 5.0.0.1' gem "paperclip", "~> 5.0.0" ruby 2.3.1p112 (2016-04-26 revision 54768) [x86_64-linux]
EDIT: I've managed to get it to start throwing errors by changing the model to this:
class User < ApplicationRecord has_secure_password has_attached_file :avatar, :path => ":rails_root/public/system/:attachment/:id/:basename_:style.:extension", :url => "/system/:attachment/:id/:basename_:style.:extension", :styles => { :thumb => ['100x100#', :jpg, :quality => 70], :preview => ['480x480#', :jpg, :quality => 70], :large => ['600>', :jpg, :quality => 70], :retina => ['1200>', :jpg, :quality => 30] }, :convert_options => { :thumb => '-set colorspace sRGB -strip', :preview => '-set colorspace sRGB -strip', :large => '-set colorspace sRGB -strip', :retina => '-set colorspace sRGB -strip -sharpen 0x0.5' } validates_attachment :avatar, :presence => true, :size => { :in => 0..10.megabytes }, :content_type => { :content_type => /^image\/(jpeg|png|gif|tiff)$/ } belongs_to :leitung def admin? self.role == "Admin" end def al? self.role == "Al" end end
Console now looks like this:
Started POST "/leiter/new" for 127.0.0.1 at 2017-01-01 17:11:59 +0000 Processing by Leiter::UsersController#create as HTML Parameters: {"utf8"=>"✓", "authenticity_token"=>"2z3H8rWo2TLADJtx3kWiCufulyLSBzLLCrxLGaLFH9BWOlGtMZ7BuPFCte8cEY5fC6yFVVggbi6vhESWLFFlRA==", "user"=>{"first_name"=>"asdf", "last_name"=>"asdf", "pfadi_name"=>"asdf", "email"=>"asdf@asdf.asdf", "password"=>"[FILTERED]", "password_confirmation"=>"[FILTERED]", "leitung_id"=>"1", "role"=>"asdf", "avatar"=>#<ActionDispatch::Http::UploadedFile:0x007feb301d8058 @tempfile=#<Tempfile:/tmp/RackMultipart20170101-6509-1yifkdk.jpg>, @original_filename="nobody_m.original.jpg", @content_type="image/jpeg", @headers="Content-Disposition: form-data; name=\"user[avatar]\"; filename=\"nobody_m.original.jpg\"\r\nContent-Type: image/jpeg\r\n">}, "commit"=>"Create an account"} User Load (0.1ms) SELECT "users".* FROM "users" WHERE "users"."id" = ? LIMIT ? [["id", 3], ["LIMIT", 1]] Command :: file -b --mime '/tmp/3068f4f020f8c43d300b1e06b58b829b20170101-6509-tn2f1u.jpg' Command :: identify -format '%wx%h,%[exif:orientation]' '/tmp/3068f4f020f8c43d300b1e06b58b829b20170101-6509-q2rz7h.jpg[0]' 2>/dev/null [paperclip] An error was received while processing: #<Paperclip::Errors::NotIdentifiedByImageMagickError: Paperclip::Errors::NotIdentifiedByImageMagickError> Command :: identify -format '%wx%h,%[exif:orientation]' '/tmp/3068f4f020f8c43d300b1e06b58b829b20170101-6509-q2rz7h.jpg[0]' 2>/dev/null [paperclip] An error was received while processing: #<Paperclip::Errors::NotIdentifiedByImageMagickError: Paperclip::Errors::NotIdentifiedByImageMagickError> Command :: identify -format '%wx%h,%[exif:orientation]' '/tmp/3068f4f020f8c43d300b1e06b58b829b20170101-6509-q2rz7h.jpg[0]' 2>/dev/null [paperclip] An error was received while processing: #<Paperclip::Errors::NotIdentifiedByImageMagickError: Paperclip::Errors::NotIdentifiedByImageMagickError> Command :: identify -format '%wx%h,%[exif:orientation]' '/tmp/3068f4f020f8c43d300b1e06b58b829b20170101-6509-q2rz7h.jpg[0]' 2>/dev/null [paperclip] An error was received while processing: #<Paperclip::Errors::NotIdentifiedByImageMagickError: Paperclip::Errors::NotIdentifiedByImageMagickError> (0.1ms) begin transaction Command :: file -b --mime '/tmp/3068f4f020f8c43d300b1e06b58b829b20170101-6509-1p20xan.jpg' Leitung Load (0.2ms) SELECT "leitungen".* FROM "leitungen" WHERE "leitungen"."id" = ? LIMIT ? [["id", 1], ["LIMIT", 1]] (0.0ms) rollback transaction Redirected to http://localhost:3000/leiter/new Completed 302 Found in 136ms (ActiveRecord: 0.4ms)
However, the usual fix to this problem, setting the development.rb file to this didn't work:
Paperclip.options[:command_path] = "/usr/local/bin/"
(Start of OP:) I'm working on setting up paperclip (with ImageMagick) so that users on my app can upload avatars for their account. The avatars should be saved locally on the server (speak my PC as the app is in development only at the moment). I followed the documentation on GitHub to set up paperclip. Everything seems to be working... Right until I try to actually upload an image. After I submit (in this case editing an existing user to add an image, but the same thing happens when creating a new user), it doesn't throw an error or anything, it just reloads the page and grays out the submit button. The following message appears in the console:
Started PUT "/leiter/edit" for 127.0.0.1 at 2016-12-31 18:33:19 +0000 ActiveRecord::SchemaMigration Load (0.1ms) SELECT "schema_migrations".* FROM "schema_migrations" Processing by Leiter::UsersController#update as HTML Parameters: {"utf8"=>"✓", "authenticity_token"=>"RjjDgMQESgZ/9DVXTWoTvJDitAmYXqfMyVJJyKpXDsp3hE0dejJ6erMlV+wsFEH9bFlz7ZsvBlgPO63o8PkpYw==", "user"=>{"first_name"=>"Admin", "last_name"=>"Admin", "pfadi_name"=>"Admin", "email"=>"admin@application.com", "leitung_id"=>"6", "role"=>"Admin", "avatar"=>#<ActionDispatch::Http::UploadedFile:0x00000003671238 @tempfile=#<Tempfile:/tmp/RackMultipart20161231-3455-mekx7p.jpg>, @original_filename="nobody_m.original.jpg", @content_type="image/jpeg", @headers="Content-Disposition: form-data; name=\"user[avatar]\"; filename=\"nobody_m.original.jpg\"\r\nContent-Type: image/jpeg\r\n">}, "commit"=>"Speichern"} User Load (0.2ms) SELECT "users".* FROM "users" WHERE "users"."id" = ? LIMIT ? [["id", 1], ["LIMIT", 1]] (0.1ms) begin transaction Command :: PATH=/usr/local/bin/:$PATH; file -b --mime '/tmp/3068f4f020f8c43d300b1e06b58b829b20161231-3455-1vvcs8q.jpg' Command :: PATH=/usr/local/bin/:$PATH; file -b --mime '/tmp/3068f4f020f8c43d300b1e06b58b829b20161231-3455-1cldo2f.jpg' Leitung Load (0.2ms) SELECT "leitungen".* FROM "leitungen" WHERE "leitungen"."id" = ? LIMIT ? [["id", 6], ["LIMIT", 1]] (0.1ms) rollback transaction No template found for Leiter::UsersController#update, rendering head :no_content Completed 204 No Content in 81ms (ActiveRecord: 1.4ms)
In the views, anywhere the image is supposed to appear, it says missing instead. Interesting is that it lets me create and update users if I don't upload an image, even though I have the image required in the parameters. I am absolutely clueless as to why this happens. If it helps, here are is my user model, my controllers etc.:
User Model:
class User < ApplicationRecord has_secure_password has_attached_file :avatar, styles: { medium: "300x300>", thumb: "100x100>" }, default_url: "/images/:style/missing.png" validates_attachment_content_type :avatar, :content_type => ["avatar/jpg", "avatar/jpeg", "avatar/png", "avatar/gif"] belongs_to :leitung def admin? self.role == "Admin" end def al? self.role == "Al" end end
Users Controller:
class Leiter::UsersController < ApplicationController def new @newuser = User.new end def edit @user = User.find(session[:user_id]) end def update @user = User.find(session[:user_id]) if @user.update_attributes(user_params) then redirect_to '/leiter' end end def create @user = User.new(user_params) if @user.save redirect_to '/leiter' else redirect_to '/' end end private def user_params params.require(:user).permit(:first_name, :last_name, :pfadi_name, :email, :password, :password_confirmation, :leitung_id, :role, :avatar) end end
View to update user:
<%= simple_form_for @user, url: {action: "edit"}, html: { method: :put } do |f| %> <%= f.text_field :first_name, :placeholder => "First name" %><br> <%= f.text_field :last_name, :placeholder => "Last name" %><br> <%= f.text_field :pfadi_name, :placeholder => "Pfadi name" %><br> <%= f.email_field :email, :placeholder => "Email" %><br> <%= f.association :leitung, :placeholder => "Leitung" %><br> <%= f.text_field :role, :placeholder => "Rolle" %><br> <%= f.input :avatar, as: :file %> <%= f.submit "Speichern", class: "btn-submit" %> <% end %>
If you need additional information, I can provide it. Thank you for helping, I'm sure I've made some trivial mistake, but I can't find it... I'm new to rails, but its been very fun so far!
EDIT:
gem 'rails', '~> 5.0.0', '>= 5.0.0.1' gem "paperclip", "~> 5.0.0" ruby 2.3.1p112 (2016-04-26 revision 54768) [x86_64-linux]
原文:https://stackoverflow.com/questions/41410923
最满意答案
可以使用
UNION ALL
收集所有可能的值,然后COUNT(DISTINCT bag)
将完成其余的操作,如下所示:
SELECT COUNT(DISTINCT bag) from (SELECT bag_1 AS bag FROM demo UNION ALL SELECT bag_2 AS bag FROM demo) a;
+---------------------+ | count(distinct bag) | +---------------------+ | 7 | +---------------------+
编辑:@Tim Biegeleisen和@eggyal的屈膝礼,一个较短的形式是:
SELECT COUNT(*) from (SELECT bag_1 AS bag FROM demo UNION SELECT bag_2 AS bag FROM demo) a;
One can use
UNION ALL
to collect all possible values, thenCOUNT(DISTINCT bag)
will do the rest, like so:
SELECT COUNT(DISTINCT bag) from (SELECT bag_1 AS bag FROM demo UNION ALL SELECT bag_2 AS bag FROM demo) a;
+---------------------+ | count(distinct bag) | +---------------------+ | 7 | +---------------------+
Edit: curtsy of @Tim Biegeleisen and @eggyal, a shorter form would be:
SELECT COUNT(*) from (SELECT bag_1 AS bag FROM demo UNION SELECT bag_2 AS bag FROM demo) a;
相关问答
更多-
您可以在COUNT聚合函数中使用DISTINCT关键字: SELECT COUNT(DISTINCT column_name) AS some_alias FROM table_name 这将只计算该列的不同值。 You can use the DISTINCT keyword within the COUNT aggregate function: SELECT COUNT(DISTINCT column_name) AS some_alias FROM table_name This will co ...
-
如何根据选择列SQL Server COUNT DISTINCT(How to COUNT DISTINCT on basis of Selective columns SQL Server)[2022-10-31]
你可以用另一个选择包装它: SELECT COUNT(*) FROM ( SELECT DISTINCT Source_Node, Target_Node FROM GraphEdges WHERE Source_Node IN (...Node_List...) AND Target_Node IN (...Node_List...)) 或者没有子查询的解决方案: SELECT count(distinct concat(Source_Node,Target_No ... -
我不确定我完全理解你的意图,但也许下面的查询可能是你想要的? 鉴于您的样本数据,它似乎产生了正确的输出。 SELECT state.msg, SUM(CASE WHEN true_id = state_value THEN 1 ELSE 0 END) AS Trues, SUM(CASE WHEN false_id = state_value THEN 1 ELSE 0 END) AS Falses FROM state JOIN step ON state.t_id = step.state_ ...
-
有没有办法在一个查询中查找多列的所有不同值?(Is there a way to find all distinct values for multiple columns in one query?)[2023-09-02]
此查询将返回上面描述的输出: SELECT DocumentID As DocumentID, 'FileName' As AttributeType, FileName As DistinctValue FROM TableName UNION SELECT DocumentID, 'Added Date', Added_date FROM TableName UNION SELECT DocumentID, 'Created By', created_by FROM TableName UNION . ... -
可以使用UNION ALL收集所有可能的值,然后COUNT(DISTINCT bag)将完成其余的操作,如下所示: SELECT COUNT(DISTINCT bag) from (SELECT bag_1 AS bag FROM demo UNION ALL SELECT bag_2 AS bag FROM demo) a; +---------------------+ | count(distinct bag) | +---------------------+ | 7 | +------------ ...
-
试试这个(SQL Server 2005语法): DECLARE @YourTable table (col1 varchar(5) ,col2 int ,col3 datetime ,col4 char(3) ) insert into @YourTable values ('abcdf',123, ...
-
SQL Server 2008中多列中的COUNT(DISTINCT)(COUNT(DISTINCT) in multiple columns in SQL Server 2008)[2024-01-28]
您可以使用cross apply和values 。 select T1.AssetId, count(distinct T2.ID) TotalIds, sum(case T2.InStock when 0 then 0 else 1 end) AvailableIds from YourTable as T1 cross apply(values(T1.MyId, T1.InStock), (T1.TheirId, 0) ... -
好的......这次我明白了! select new_table.model, count (new_table.model) as drives, sum (new_table.distance) as distance, sum(case when driver = 'john' then 1 else 0 end) as john, sum(case when driver = 'juliet' then 1 else 0 end) as juliet, s ...
-
在SQL中的两列中具有相同值的聚合计数行(Aggregate Count rows that have the same values in two columns in SQL)[2022-02-28]
您可以按查询加入组中的结果,并获得如下结果: SELECT t.A,t.B,C,D,E,F,t1.cnt FROM the_table t JOIN (SELECT A,B,COUNT(*) cnt FROM the_table GROUP BY A,B) t1 ON t.A = t1.A AND t.B = t1.B 以下是使用聚合函数执行此操作的另一种方法: SELECT A,B,C,D,E,F, count(a + b) over(partition by a,b) cnt FROM the_ ... -
MySQL Query用于在列中查找不同的值并获取总和(MySQL Query for finding distinct values in columns and getting the sum)[2023-06-17]
更新 - 你对UNION出错了。 它删除重复。 你的内部查询正在返回(5,5,4,2,1,1,0),但是在删除重复项后,联合将它们转换为(5,4,2,1,0)。 您需要使用UNION ALL来计算所有内容。 只需用UNION ALL替换所有UNION 当你这样做时,你会注意到如果跨列有电影,即如果电影300在不同用户的Movie4和Movie5列中,它将计数两次。 如果您需要在所有列中获取不同的电影,请首先从各个列获取不同的电影, UNION它们可以删除重复项,然后计算电影。 SELECT COUNT(mo ...