簡體   English   中英

Rails應用程序Carrierwave上傳了開發工作,但停止了生產工作

[英]Rails app Carrierwave uploads work on development but stop working on production

我的上傳在我的本地計算機上可以正常工作,但是在生產服務器上無法工作。 代碼相同,沒有未提交的提交等。

這是在本地計算機上發生的事情:

Started POST "/admin/projects" for 127.0.0.1 at 2015-10-08 17:17:11 +0300
Processing by Admin::ProjectsController#create as HTML
  Parameters: {"utf8"=>"✓", "authenticity_token"=>"BLD9208mLcwkXDjyqYbf7sFBs51mgrGAGZYFIi2VT+jstdj0FdC0PB+DmrX3epz7m7UU5LXmN+961/9EN7ExQA==", "projectphotos"=>[#<ActionDispatch::Http::UploadedFile:0x007fbffb8133d8 @tempfile=#<Tempfile:/var/folders/dz/tf2gsysx18n_cj_m1xqbpyw80000gn/T/RackMultipart20151008-24531-w7z0b4.jpg>, @original_filename="_MG_9839.jpg", @content_type="image/jpeg", @headers="Content-Disposition: form-data; name=\"projectphotos[]\"; filename=\"_MG_9839.jpg\"\r\nContent-Type: image/jpeg\r\n">, #<ActionDispatch::Http::UploadedFile:0x007fbffb813360 @tempfile=#<Tempfile:/var/folders/dz/tf2gsysx18n_cj_m1xqbpyw80000gn/T/RackMultipart20151008-24531-1f7lkwr.jpg>, @original_filename="_MG_9847.jpg", @content_type="image/jpeg", @headers="Content-Disposition: form-data; name=\"projectphotos[]\"; filename=\"_MG_9847.jpg\"\r\nContent-Type: image/jpeg\r\n">, #<ActionDispatch::Http::UploadedFile:0x007fbffb8132e8 @tempfile=#<Tempfile:/var/folders/dz/tf2gsysx18n_cj_m1xqbpyw80000gn/T/RackMultipart20151008-24531-1u4h5f2.jpg>, @original_filename="_MG_9857.jpg", @content_type="image/jpeg", @headers="Content-Disposition: form-data; name=\"projectphotos[]\"; filename=\"_MG_9857.jpg\"\r\nContent-Type: image/jpeg\r\n">], "project"=>{"title"=>"Тестик", "desctitle"=>"Проектик", "description"=>"пупик", "teammember_ids"=>["6", ""]}, "commit"=>"Сохранить проект"}
  User Load (0.3ms)  SELECT  "users".* FROM "users" WHERE "users"."id" = $1  ORDER BY "users"."id" ASC LIMIT 1  [["id", 1]]
  Teammember Load (0.2ms)  SELECT  "teammembers".* FROM "teammembers" WHERE "teammembers"."id" = $1 LIMIT 1  [["id", 6]]
   (0.1ms)  BEGIN
  SQL (1.8ms)  INSERT INTO "projects" ("title", "description", "desctitle", "created_at", "updated_at") VALUES ($1, $2, $3, $4, $5) RETURNING "id"  [["title", "Тестик"], ["description", "пупик"], ["desctitle", "Проектик"], ["created_at", "2015-10-08 14:17:11.018140"], ["updated_at", "2015-10-08 14:17:11.018140"]]
  SQL (1.4ms)  INSERT INTO "participations" ("teammember_id", "project_id", "created_at", "updated_at") VALUES ($1, $2, $3, $4) RETURNING "id"  [["teammember_id", 6], ["project_id", 51], ["created_at", "2015-10-08 14:17:11.021601"], ["updated_at", "2015-10-08 14:17:11.021601"]]
   (1.4ms)  COMMIT
   (0.1ms)  BEGIN
  SQL (3.4ms)  INSERT INTO "projectphotos" ("image", "project_id", "created_at", "updated_at") VALUES ($1, $2, $3, $4) RETURNING "id"  [["image", "_MG_9839.jpg"], ["project_id", 51], ["created_at", "2015-10-08 14:17:12.074996"], ["updated_at", "2015-10-08 14:17:12.074996"]]
   (0.5ms)  COMMIT
   (0.1ms)  BEGIN
  SQL (0.4ms)  INSERT INTO "projectphotos" ("image", "project_id", "created_at", "updated_at") VALUES ($1, $2, $3, $4) RETURNING "id"  [["image", "_MG_9847.jpg"], ["project_id", 51], ["created_at", "2015-10-08 14:17:12.914800"], ["updated_at", "2015-10-08 14:17:12.914800"]]
   (0.4ms)  COMMIT
   (0.1ms)  BEGIN
  SQL (0.4ms)  INSERT INTO "projectphotos" ("image", "project_id", "created_at", "updated_at") VALUES ($1, $2, $3, $4) RETURNING "id"  [["image", "_MG_9857.jpg"], ["project_id", 51], ["created_at", "2015-10-08 14:17:13.759695"], ["updated_at", "2015-10-08 14:17:13.759695"]]
   (0.4ms)  COMMIT
Redirected to http://localhost:9292/admin/projects
Completed 302 Found in 2780ms (ActiveRecord: 11.4ms)

完美,正在上傳圖片等等。

現在,在生產服務器上執行完全相同的操作:

I, [2015-10-08T10:23:50.330774 #13367]  INFO -- : Started POST "/admin/projects" for 89.169.175.47 at 2015-10-08 10:23:50 -0400
I, [2015-10-08T10:23:50.334229 #13367]  INFO -- : Processing by Admin::ProjectsController#create as HTML
I, [2015-10-08T10:23:50.334437 #13367]  INFO -- :   Parameters: {"utf8"=>"✓", "authenticity_token"=>"2hx8xJdCrvkmwkfKGI4Y/gzu3bc/hPWNsrWgtNo/97kWFWKauYOrWh6v15mHQ/28sqaaAb08hEhHrkuvFjmxPw==", "projectphotos"=>[#<ActionDispatch::Http::UploadedFile:0x007f6d9006fc98 @tempfile=#<Tempfile:/tmp/RackMultipart20151008-13367-18ri23t.jpg>, @original_filename="_MG_9839.jpg", @content_type="image/jpeg", @headers="Content-Disposition: form-data; name=\"projectphotos[]\"; filename=\"_MG_9839.jpg\"\r\nContent-Type: image/jpeg\r\n">, #<ActionDispatch::Http::UploadedFile:0x007f6d9006fc20 @tempfile=#<Tempfile:/tmp/RackMultipart20151008-13367-yrlhkm.jpg>, @original_filename="_MG_9847.jpg", @content_type="image/jpeg", @headers="Content-Disposition: form-data; name=\"projectphotos[]\"; filename=\"_MG_9847.jpg\"\r\nContent-Type: image/jpeg\r\n">, #<ActionDispatch::Http::UploadedFile:0x007f6d9006fba8 @tempfile=#<Tempfile:/tmp/RackMultipart20151008-13367-1l2x4tu.jpg>, @original_filename="_MG_9857.jpg", @content_type="image/jpeg", @headers="Content-Disposition: form-data; name=\"projectphotos[]\"; filename=\"_MG_9857.jpg\"\r\nContent-Type: image/jpeg\r\n">], "project"=>{"title"=>"Тестовый проект", "desctitle"=>"Тестик", "description"=>"Тестовый проект", "teammember_ids"=>[""]}, "commit"=>"Сохранить проект"}
D, [2015-10-08T10:23:50.337997 #13367] DEBUG -- :   User Load (0.6ms)  SELECT  "users".* FROM "users" WHERE "users"."id" = $1  ORDER BY "users"."id" ASC LIMIT 1  [["id", 1]]
D, [2015-10-08T10:23:50.343076 #13367] DEBUG -- :    (0.1ms)  BEGIN
D, [2015-10-08T10:23:50.346752 #13367] DEBUG -- :   SQL (1.2ms)  INSERT INTO "projects" ("title", "description", "desctitle", "created_at", "updated_at") VALUES ($1, $2, $3, $4, $5) RETURNING "id"  [["title", "Тестовый проект"], ["description", "Тестовый проект"], ["desctitle", "Тестик"], ["created_at", "2015-10-08 14:23:50.343540"], ["updated_at", "2015-10-08 14:23:50.343540"]]
D, [2015-10-08T10:23:50.348048 #13367] DEBUG -- :    (0.7ms)  COMMIT
D, [2015-10-08T10:23:50.349034 #13367] DEBUG -- :    (0.2ms)  BEGIN
D, [2015-10-08T10:23:50.373831 #13367] DEBUG -- :    (0.3ms)  COMMIT
D, [2015-10-08T10:23:50.374391 #13367] DEBUG -- :    (0.2ms)  BEGIN
D, [2015-10-08T10:23:50.384639 #13367] DEBUG -- :    (0.2ms)  COMMIT
D, [2015-10-08T10:23:50.385026 #13367] DEBUG -- :    (0.2ms)  BEGIN
D, [2015-10-08T10:23:50.392234 #13367] DEBUG -- :    (0.2ms)  COMMIT
I, [2015-10-08T10:23:50.393967 #13367]  INFO -- : Redirected to http://46.101.161.208/admin/projects
I, [2015-10-08T10:23:50.394322 #13367]  INFO -- : Completed 302 Found in 60ms (ActiveRecord: 6.2ms)

圖像位於params哈希中,但未插入數據庫中。 有人可以提示我正確的方向嗎?

這是我的projects_controller.rb:

def update
        if @project.update(project_params)
            if params[:projectphotos]

                params[:projectphotos].each { |image| @project.projectphotos.create(image: image) }
            end
            redirect_to admin_projects_path
            flash[:success] = "Updated"
        end
    end

    def edit
    end

    def show
    end

    def create
        @project = Project.new(project_params)
        if @project.save
            if params[:projectphotos]
                params[:projectphotos].each { |image| @project.projectphotos.create(image: image) }
            end
            redirect_to admin_projects_path
            flash[:success] = 'Created'
        else
            flash[:alert] = 'Something went wrong'
            render 'new'
        end
    end

完全相同的代碼已經可以在生產中工作了一段時間,但是我認為在添加ImageMagick調整大小后,它已經停止工作了。 我改用MiniMagick,而在其他項目中,使用MiniMagick調整大小和上傳圖片效果很好,但是我在生產中遇到了這個問題。 老實說,這就是為什么我不相信這個問題是由MiniMagick引起的,只想分享此信息。

更新:根據要求,這是我的上傳者代碼:

# encoding: utf-8

class ImageUploader < CarrierWave::Uploader::Base

  # Include RMagick or MiniMagick support:
  # include CarrierWave::RMagick
  include CarrierWave::MiniMagick

  # Choose what kind of storage to use for this uploader:
  storage :file
  # storage :fog

  # Override the directory where uploaded files will be stored.
  # This is a sensible default for uploaders that are meant to be mounted:
  def store_dir
    "uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
  end



  # Create different versions of your uploaded files:
  # version :thumb do
  #   process :resize_to_fit => [50, 50]
  # end
  version :thumb_next do
    process :resize_to_fill => [600, 460]
  end

  version :main_image do
    process :resize_to_fill => [1170, 700]
  end

  version :thumb_small do
    process :resize_to_fit => [50,50]
  end

  version :thumb_medium do
    process :resize_to_fit => [350,350]
  end

end

更新2:這變得更加荒謬,我添加了一些簡單的輸出來調試生產代碼:

projects_controller.rb

def update
        if @project.update(project_params)
            if params[:projectphotos]
                p "inside params"
                params[:projectphotos].each do |image| 
                    p image
                    p "inside of each image param"
                    if @project.projectphotos.create(image: image) 
                        p "created image"
                    end
                end
            end
            redirect_to admin_projects_path
            flash[:success] = "Updated"
        end
    end

通過該更新,我可以在生產中獲得此功能:

deploy@rails:~$ cat apps/furnitureapp/current/log/puma.error.log 
=== puma startup: 2015-10-12 05:23:35 -0400 ===
* Inherited unix:///home/deploy/apps/furnitureapp/shared/tmp/sockets/furnitureapp-puma.sock
"inside params"
#<ActionDispatch::Http::UploadedFile:0x007f6e08304828 @tempfile=#<Tempfile:/tmp/RackMultipart20151012-26945-1wzj8kl.jpg>, @original_filename="American-Psycho-blood.jpg", @content_type="image/jpeg", @headers="Content-Disposition: form-data; name=\"projectphotos[]\"; filename=\"American-Psycho-blood.jpg\"\r\nContent-Type: image/jpeg\r\n">
"inside of each image param"
"created image"
#<ActionDispatch::Http::UploadedFile:0x007f6e083047b0 @tempfile=#<Tempfile:/tmp/RackMultipart20151012-26945-ahjgw2.jpg>, @original_filename="i-love-sales.jpg", @content_type="image/jpeg", @headers="Content-Disposition: form-data; name=\"projectphotos[]\"; filename=\"i-love-sales.jpg\"\r\nContent-Type: image/jpeg\r\n">
"inside of each image param"
"created image"

但是仍然沒有圖像,也沒有插入sql查詢! Projectphoto.all沒有顯示任何條目,盡管它顯然應該已經創建了圖像。

好的,顯然我的生產服務器上沒有安裝imagemagick。

感謝這篇文章-https://chuanhesmile.wordpress.com/2014/12/13/issue-fixed-rollback-transaction-when-uploading-images-using-carrierwave/

我遇到的問題-執行“創建”操作時沒有錯誤消息,也沒有回滾。 相反,我改寫了控制器,使其使用“ build”和“ save”。

def update
        if @project.update(project_params)
            if params[:projectphotos]
                p "inside params"
                params[:projectphotos].each do |image| 
                    p image
                    p "inside of each image param"
                    @newImage = @project.projectphotos.build(image: image) 
                    if @newImage.save
                        p "saved image"
                    end
                end
            end
            redirect_to admin_projects_path
            flash[:success] = "Обновлено"
        end
    end

這至少使我回滾了。

由於有這樣的問題,我能夠調試回滾(Rollback)( 如何找到ActiveRecord ROLLBACK的原因) (重要的是使用BANG-'!'保存文件)。 最終導致了一些可以理解的錯誤:

2.2.0 :011 > @pr.save!
   (1.0ms)  BEGIN
   (0.4ms)  ROLLBACK
ActiveRecord::RecordInvalid: Validation failed: Projectphotos image Failed to manipulate with MiniMagick, maybe it is not an image? Original Error: ImageMagick/GraphicsMagick is not installed

也許它可以幫助某人。

請檢查是否已安裝ImageMagick / GraphicsMagick

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM