私は、Amazon S3に画像をアップロードするためにPaperclipを取得しようとしていました。プログラムは最初は動作していましたが、(s3に設定された記憶方法にもかかわらず)ローカルにしか保存されず、デフォルトのパスをオーバーライドする必要があるとわかったら、書き込みエラーでクラッシュします。開発と生産でS3にアップロードするPaperclipを取得する
重要かどうかわかりませんが、私はDeviseを使用しており、profile_image
をユーザーモデルに追加しました。
私はここでHerokuの
からthis guideに従うことをしようとしているだけでS3のためにセットアップするために見せかけにもかかわらず、ローカルに書く最初のセットアップです:
user.rb
class User < ApplicationRecord
has_attached_file :profile_image, styles: {
thumb: '100x100>',
square: '200x200#',
medium: '300x300>'
}
validates_attachment_content_type :profile_image, :content_type => /\Aimage\/.*\Z/
end
production.rbとdevelopment.rb
config.paperlip_defaults = {
storage: :s3,
s3_credientials: {
bucket: ENV.fetch('S3_BUCKET_NAME'),
access_key_id: ENV.fetch('AWS_ACCESS_KEY_ID'),
secret_access_key: ENV.fetch('AWS_SECRET_ACCESS_KEY'),
s3_region: ENV.fetch('AWS_REGION')
}
}
Paperclip.options[:command_path] = '/usr/local/bin/'
アップロードフォームの部分 app/views/devise/registrations/edit.html.erb
<div class="form-group">
<% if @user.profile_image.present? %>
<%= image_tag(current_user.profile_image.url(:square)) %><br />
<%= link_to 'Remove profile image', remove_profile_image_path, method: :put, data: { confirm: 'Are you sure?' }, type: 'button' %>
<% else %>
<%= f.label :profile_image %>
<%= f.file_field :profile_image %>
<% end %>
</div>
この設定では、Paperclipは機能しますが、イメージをローカルに保存するだけです(これは開発中とHerokuの両方に適用されます)。
次に、Iは
設定/イニシャライザ/ paperclip.rb
Paperclip::Attachment.default_options[:url] = ':s3_domain_url'
Paperclip::Attachment.default_options[:path] = '/:class/:attachment/:id_partition/:style/:filename'
にこれを追加することによって、フォームAWSを来て、表示URLを強制しようとし、これはそこから来て画像パスを強制し(画像が既に添付されているユーザーのページを更新したとき、アップロードされた画像がなかったために壊れていました)。ただし、この画像を削除した後、もうアップロードできませんでした。私がしようとするたびに、私はこのエラーを取得アップロードする:私は動作しませんでした
Paperclip::Attachment.default_options[:s3_host_name] = 's3-us-east-1.amazonaws.com'
(Herokuのチュートリアルから)追加の初期化子を追加しました。この問題を解決しようとする試みで
Errno::EACCES in Devise::RegistrationsController#update
Permission denied @ dir_s_mkdir - /users/profile_images
をし、私が追加してみました成功なしproduction.rbとdevelopment.rbへ行(私はデフォルトのハッシュの両方を追加し、資格情報がハッシュしようとした)
s3_domain_url: 's3-us-east-1.amazonaws.com'
私はエラーがローカル書き込みエラーであることを理解し、私のsp
Paperclipは、デフォルトではストレージ値を無視し、ローカルに保存する理由は何ですか(最初のシナリオでは) それはなぜ私のローカルディスクに書き込もうとしていて(2番目のシナリオで)、S3にアップロードしていないのですか?
更新 Gemfile
source 'https://rubygems.org'
ruby '2.3.3'
gem 'rails', '~> 5.0.0', '>= 5.0.0.1'
gem 'puma', '~> 3.0'
gem 'sass-rails', '~> 5.0'
gem 'uglifier', '>= 1.3.0'
gem 'coffee-rails', '~> 4.2'
gem 'jquery-rails'
gem 'turbolinks', '~> 5'
gem 'jbuilder', '~> 2.5'
gem 'bcrypt', '~> 3.1.7'
gem 'devise'
gem 'font-awesome-rails'
gem 'bourbon', '5.0.0.beta.7'
gem 'neat', '2.0.0'
gem 'autoprefixer-rails'
gem 'font-awesome-sass', '~> 4.7.0'
gem 'paperclip'
gem 'aws-sdk', '~> 2.3'
group :development, :test do
gem 'sqlite3'
gem 'byebug', platform: :mri
gem 'dotenv-rails'
end
group :development do
gem 'listen', '~> 3.0.5'
gem 'web-console'
gem 'spring'
gem 'spring-watcher-listen', '~> 2.0.0'
gem 'rubocop', require: false
gem 'haml-lint', require: false
end
group :test do
gem 'guard', '2.13.0'
gem 'minitest-reporters', '1.1.9'
gem 'coveralls', require: false
gem 'capybara'
gem 'factory_girl_rails', '~>4.0'
end
group :production do
gem 'pg', '0.18.4'
end
# Windows does not include zoneinfo files, so bundle the tzinfo-data gem
gem 'tzinfo-data', platforms: [:mingw, :mswin, :x64_mingw, :jruby]
これは、書き込みエラーを解決しますが、画像はまだ、ローカルに保存され、あなたがあなたのGemfileを投稿できるS3 – oneWorkingHeadphone
にアップロードされていませんか? – Jeremie
下に追加 – oneWorkingHeadphone