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:
é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é.
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
Toujours pas de travail AWS s3, comment le faire correctement? – Leder
mis à jour le fichier de configuration pour la mise en œuvre de la réponse actuelle – Leder