2017-01-28 5 views
0

私はDropzone addon(ember-cli-dropzonejs)を使ってEmberで画像をアップロードしました。Rails 5はサーバ(Ubuntu 14.x)上で動作していますが、imagemagickはRails Docker Containerにインストールされており、すべてのファイルは "uploads"フォルダに移動します。 すべてがdockerコンテナとして実行されているので、rails、frontend、databaseおよびnginx(1.11.4)は別々のコンテナです。 イメージをアップロードしようとすると、サーバーの応答は405で、レールには何も取得されませんでした(ログには何も表示されません)。nginx 405 - imberをemberからレールにアップロード

燃えさしHBS

{{drop-zone url=uploadURL 
      method='PATCH' 
      headers=authentication acceptedFiles='.jpg, .jpeg, .gif, .png' 
      resize='' 
      maxFilesize='10' 
      dictDefaultMessage='Upload file' 
      success=(action 'succesfulFileUpload') 
      complete=resetUploader 
      previewTemplate='<div></div>' 
      uploadprogress=progressManipulation 
      sending=sending 
      }} 

レールを提出uploader.rb

class AvatarUploader < CarrierWave::Uploader::Base 

    include CarrierWave::MiniMagick 

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

    def store_dir 
    "uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}" 
    end 

    version :thumb do 
    process resize_to_fill: [200, 200] 
    end 

    # Add a white list of extensions which are allowed to be uploaded. 
    # For images you might use something like this: 
    def extension_whitelist 
    %w(jpg jpeg gif png) 
    end 

    # Override the filename of the uploaded files: 
    # Avoid using model.id or version_name here, see uploader/store.rb for details. 
    def filename 
    return unless original_filename 
    contenttype = original_filename.split('.').last 
    "avatar.#{contenttype}" 
    end 
end 

nginxの設定ファイル

server { 
    listen 443 ssl; 

    server_name example.com; 

    .... 
    ssl stuff 
    .... 

    location/{ 
    proxy_read_timeout 150; 
    proxy_set_header  Host $host:$server_port; 
    proxy_set_header  X-Real-IP $remote_addr; 
    proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for; 
    proxy_set_header  X-Forwarded-Proto $scheme; 
    proxy_pass http://backend:3000; 
    } 

} 

要求:Request img details

応答:Response img output

私はneginxの設定に次の行(のようなStackOverflowの上で100回を推奨)...

error_page 405  =200 $uri; 

を置く場合...サーバーがエラーをスローします。

Can not read property 'attributes' of undefined 

このエラーメッセージはdropzoneからです。アップロードを完了できません。レールには何もありません、何も...

UPDATE & SOLUTION私はそれを修正 Finaly、ログにエントリを受けていません。問題は、Handlebarsの間違ったuploadURLでした。これは相対パスであるため、ローカルの間違ったURLで作業しました。しかし、生産には廃止された道が必要でした。

+0

あまりにも多くのコンテナについて、フロントエンドについては何もしていません。 emberからサーバーにファイルをアップロードするために使用するアドオンやコードに関する簡単な情報を含めるとすばらしいことでしょう。あなたのフロントエンドがファイルを送信するかどうか確認しましたか?多分それはしません。デベロッパーツール(ChromeではCtrl + Shift + I)、そのための[ネットワーク]タブを使用する必要があります。 –

+0

405は「メソッドがサポートされていません」です。送信側で何かが間違っている可能性があります。また、 'error_page 405 = 200 $ uri;'のような欺瞞を避けるべきです。 Webサーバーに「405エラーが発生した場合は、ステータスを200に変更して処理を続行するかどうか」を伝えるだけです。実際のプロジェクトでそれをするのは間違っています。 –

+0

「詳細のリクエスト」リンクに注目しました。 PATCHメソッドを使用します。これはおそらくnginxではサポートされていません。メソッドをPOSTに変更する方法を見つける必要があります(あなたのアプリケーションで)。私はあなたがアップロードするために何を使用するのか分からないので、より詳細な答えを与えることはできません。 [this](https://github.com/FutoRicky/ember-cli-dropzonejs)のdropzoneの場合、コンポーネントにmethod = "post"パラメータを追加すると便利です。 –

答えて

0

Finaly私はそれを修正しました。問題は、Handlebarsの間違ったuploadURLでした。これは相対パスであるため、ローカルの間違ったURLで作業しました。しかし、生産には廃止された道が必要でした。

関連する問題