2

J'ai déployé l'application Rails 5 locale avec des attaches trombones: tout fonctionnait bien. Seulement sur heroku j'ai besoin d'AWS s3 et cela ne fonctionne pas avec Rails 5.0.1/paperclip 5.1.0/aws-sdk 2.7.3.Comment configurer Rails 5, trombone 5, aws-sdk 2 sur heroku correctement?

Est-ce que quelqu'un a une configuration de travail pour stocker des pièces jointes sur s3?

Ceci est mon modèle/article.rb:

class Article < ApplicationRecord 
    has_many :comments, dependent: :destroy 
    validates :title, presence: true, 
       length: { minimum: 5 } 
    has_attached_file :attachment, 
      :url => ":s3_domain_url", 
      #:path => ':filename', 
      :storage => :s3, 
      :bucket => ENV['AWS_BUCKET'], 
      :s3_bucket => ENV['AWS_BUCKET'], 
      :s3_permissions => :private, 
      :s3_protocol => 'http', 
      :s3_host_name => 's3.amazonaws.com', 
      #:s3_host_alias => 's3.amazonaws.com', 
      :s3_region => ENV['AWS_REGION'], 
      #:region => ENV['AWS_REGION'], 
      :s3_credentials => { :access_key_id => ENV['AWS_ACCESS_KEY_ID'], 
           :secret_access_key => ENV['AWS_SECRET_KEY_ID'], 
           :endpoint => 's3.amazonaws.com' } 

    # Explicitly do not validate 
    do_not_validate_attachment_file_type :attachment 
    #validates_attachment :attachment, content_type: { content_type: 'application/x-java-archive'}, size: { in: 0..10.megabytes } 
end 

Les variables d'environnement sont définies à:

AWS_ACCESS_KEY_ID=.... 
AWS_BUCKET=.... 
AWS_REGION=us-east-1 
AWS_SECRET_KEY_ID=.... 

Le articles_controller est:

class ArticlesController < ApplicationController 

    http_basic_authenticate_with name: "gerrit", password: "_tVo1I44iyLe", except: [:index, :show] 

    def index 
    @articles = Article.all 
    end 

    def show 
    @article = Article.find(params[:id]) 
    end 



def new 
    @article = Article.new 
end 

def edit 
    @article = Article.find(params[:id]) 
end 

def create 
    @article = Article.new(article_params) 

    if @article.save 
    redirect_to @article 
    else 
    render 'new' 
    end 
end 

def update 
    @article = Article.find(params[:id]) 

    if @article.update(article_params) 
    redirect_to @article 
    else 
    render 'edit' 
    end 
end 

def destroy 
    @article = Article.find(params[:id]) 
    @article.destroy 

    redirect_to articles_path 
end 

private 
    def article_params 
    #article_params = 
    params.require(:article).permit(:title, :text, :attachment) 
    #@article.update_attributes(article_params) 
    end 
end 

C'est l'erreur I avoir maintenant localement et sur heroku, à côté de beaucoup d'autres avant:

uninitialized Paperclip constante :: :: stockage S3 :: AWS source décompressée (autour de la ligne n ° 26):

@article = Article.new(article_params) 

    if @article.save #line 26 
    redirect_to @article 
    else 
    render 'new' 

Paramètres:

{"utf8"=>"✓", "authenticity_token"=>"snGgVwA5tqQTPHXwXW1Fx/lmLMS1bL+94jF68KQh031gpX2N78gOK45hCP8w71ObFo6moHQuJXxNnUW0bCUeVw==", 
"article"=> 
    {"title"=>"test1", 
    "text"=>"", 
    "attachment"=> 
    #<ActionDispatch::Http::UploadedFile:0x007f46c00881e0 
    @content_type="application/x-desktop", 
    @headers="Content-Disposition: form-data; name=\"article[attachment]\"; filename=\"Antichamber.desktop\"\r\n" + "Content-Type: application/x-desktop\r\n", 
    @original_filename="Antichamber.desktop", 
    @tempfile=#<File:/tmp/RackMultipart20170306-5350-esbhtd.desktop>>}, 
"commit"=>"Create Article"} 

Pour plus de commodité, j'ajouter l'URL les rails brisés 5 application ici:

gmr-heroku

étapes de test:

  • cliquez sur Télécharger

  • cliquez sur Nouveau Télécharger

  • Entrez le titre: test1

  • Pièce jointe

  • Cliquez sur Créer l'article

Résultat réel:

  • erreur comme ci-dessus indiqué

Résultat attendu:

  • File Attachment est ajouté à s3 et "Téléchargements Annonce" est affiché.

Répondre

1

:url => :s3_domain_url devrait être :url => ":s3_domain_url"

+0

Avec ce changement et ': s3_permissions => 'public lu',' 'je reçois dans NameError # ArticlesController créer de uninitialized Paperclip constante :: :: stockage S3 :: AWS 'à la position' if @ article.save'. Je ne sais pas pourquoi "AWS" est mentionné, parce que j'utilise aws-sdk V2.7.7 et qui a l'espace de noms 'Aws'? J'ai essayé aws-sdk-v1 en vain ... – Leder

+0

Toujours pas de travail AWS s3, comment le faire correctement? – Leder

+0

mis à jour le fichier de configuration pour la mise en œuvre de la réponse actuelle – Leder