概要
railsのckeditorはデフォルトでrailsのuploadsフォルダにアップロードしますが、
それだとサーバの容量を取ってしまうので、画像のアップロード先をS3に上げてみたいと思います。
前提
ruby on railsの環境が整っている
ckeditorがフォームに適応されている
私はscaffoldのフォームにckeditorを適応しています。
もしもまだな人は、下のURLを参考にしてください。
ruby on railsのckeditor gemの使い方をscaffoldを用いて解説する
carrierwaveとfogをインストールする
railsのGemfileを開いて、下の内容を書き込んでください。
もしも、まだrmagickとminimagickが入っていない場合はそれも合わせてGemfileに書き込んでください。
gem 'carrierwave' gem 'fog' gem 'rmagick' gem 'mini_magick'
保存したら、下のコマンドでgemファイルをインストールします。
bundle install --path vendor/bundle
インストールが完了しました。
ckeditorの設定を変更する
ckeditorで画像をアップロードする方法として公式サイトにもあるように、carrierwaveを使う方法が記載されています。
その方法に従えば、下のコマンドでまずサーバにアップロードするための設定が作られます。
もしも、既にckeditorでcarrierwaveを使ってサーバにファイルをアップロードする為の設定ファイルがある場合はもう作らなくてよいです。
rails generate ckeditor:install --orm=active_record --backend=carrierwave
コマンドを実行すると、いくつか設定ファイルが作られます。
その中のapp/uploaders/ckeditor_picture_uploader.rbをエディタで開きます。
strage :fileという箇所があると思うのでそれを
strage :fog
に変更します。
保存しましょう。
次に、railsプロジェクトのconfig/initializers/に移動して、carrierwave.rbを作成します。
touch carrierwave.rb
carrierwave.rbをエディタで開いて、下の内容を記述します。
もしも、s3へのアクセスキーなどを持っていない場合は下の記事を参照して取得してください。
awsのs3を操作する為のaccess keyとsecret keyを取得する(IAM)
CarrierWave.configure do |config| config.fog_credentials = { :provider => 'AWS', :aws_access_key_id => 'IAMで取得したs3のアクセスキー', :aws_secret_access_key => 'IAMで取得したs3のシークレットキー', :region => 'ap-northeast-1' } config.fog_directory = 'bucket名' if Rails.env.development? end
例えば下のようになります(下のキーは適当に書いたものです。間違っても他人にアクセスキーとシークレットを見せないようにしてください)。
保存しましょう。
設定は以上です。
ckeditorからs3にアップロードしてみる
サーバを起動しましょう
bundle exec rails s
次に、ckeditorがあるURLに移動します。
画像アップのボタンをおして、「アップロード」からファイルを選択して「サーバーに送信」からファイルをアップロードしてみます。
アップしたら、画像のをURLを見ると、s3に上がっていますね。
まとめ
どうでしょうか?うまくいきましたか?ckeditorは素晴らしいのですが、設定をうまくやらないとできないので精密にやってみましょう。