PaperClip入れて画像を画像ファイルから選択できるようになったし、あとはherokuで公開するだけ!! ワーイ♪♪\(^ω^\)( /^ω^)/♪♪ワーイ
なーんて考えていたんですが。
先「そのままherokuに公開すると、画像が消えるよ?」
N「え?!なんで?!」
先「Heroku上では,ファイルをサーバ上に保存するということができません」
N「?」
先「おまいが昨日必死にアップロードしようとしていたものは金の斧ですか?銀の斧ですか?それとも画像ファイルですか?」
N「画像ファイルです」
先「正直者め(w。PG Commanderでmemosテーブルの中身見てみ」
N「パイセン、imageファイルの名前とか画像の種類とかの概要は書いてあるけど、中身そのものはないっす」
先「保存した画像ファイルはどこにあるんでしょーかっ?」
N「・・・わかんねぇっす。ここに入ってると思ってたっす(T△T)」
先「ねこてちょうのアプリのpublicってとこに入ってます。つまり、画像ファイルはPostgreSQLには入ってません」
N「ありゃー。私、画像ファイルを文字列?暗号?みたいにして保存してるのかと思ってました」
先「残念」
N「てことは、あれですか?画像ファイルは別のとこにあって、memosテーブルにあるデータは索引みたいなもん?」
先「です」
N「で、herokuには画像ファイルは保存できない、と」
先「Yes」
N「・・・別のとこに保存・・・する?」
先「そうでーす。よくできました。今回はAWSのS3をお使いなさい。herokuとS3でファイルアップロードというのはけっこうポピュラー」
N「らじゃー」
実際はもっと真面目なやりとりでしたが、上記のようなことを教えてもらったので、Google先生に「heroku S3」とお伺いしたところ、いっぱい出てきました。
おおお・・・ぽぴゅらー(w
というわけで、herokuを使う前にまずはAWS(Amazon Web Service)のS3の導入です。
Amazon S3(クラウドストレージサービス)
アカウントの登録せにゃならんので、「まずは無料ではじめる」ボタンをクリック。
英語のサイトですなぁ・・・。入力はなんとかなった(w
うぇっ、個人認証に電話が必要なのかぁ。英語だよなぁ。聞き取れるかなぁ。
あ、意外と聞き取れた!まぁ、画像に表示されてるPINナンバー入れてね(^^)さえ聞き取れればなんとかなるという(w
無事S3のアカウント登録終了。
登録が終わると「アカウントのアクティベーション中です!少々お待ちください!」となるので、その間に次の作業をしておきます。
今回の作業の参照元はコチラ。
RailsでPaperclipを使ってAmazon S3に画像を保存する
※若干古めの記事なのでちょっと気をつけておこう・・・。
[ok] gem 'aws-sdk'(S3にファイルをアップロードするためのgem)を入れる。
次、Memoモデルに画像用の設定をします。
すでにPaperclip用の設定が書かれているので、それに付け足す形になります。
app/models/memo.rb
次にAmazon S3の設定情報をAWSから取得します。
AWSのコンソールのの右上にある名前のドロップダウンリストから「認証情報」を選択します。
セキュリティ認証情報のアクセスキーの箇所でアクセスキーIDとシークレットアクセスキーをダウンロードしておきます。
画像を保存するためのバケット(保存場所)をS3に作ります。
※バケットて日本語で言うとバケツ、桶ね。
コンソールのトップ画面に戻って、ストレージ&コンテンツ配信の下にあるS3を選択。
「バケットの作成」ボタンをクリック。
ここでバケットの名前を入れて、リージョンを選べって出ます。
名前・・・名前?バケツの名前?
・・・なーんかちょっと嫌な予感。こういうのって絶対何かコツとかルールとかやっちゃいけない系とかあるんだよな。
Google先生〜!!!
S3でHTTPSを使いたかったらバケット名にピリオド入れちゃダメ
やっぱあった(T皿T)
名前はドメイン名を入れることが多いみたい。まだドメイン名ないけど・・・nekotecho.comかな?
で、バケット名にピリオドは入れない方がいいみたいなので、「nekotecho-com」にしておこうか。
nekotecho.com取れるかどうかわかんないけど(^^;
リージョンは東京で。
よし、バケット作った!
んじゃ次!
「config/s3.yml」を新規に作成します。
configの直下にs3.ymlっていうファイルを作成。Sublimetext上でやっちゃう!!(w
中身はこちら!(アクセスキーとかは伏せさせてもらってます)
で、このconfig_s3.ymlはgithubには絶対載せてはいけないファイルだそう。
そう言われればそうか。この設定内容がわかったら他の人が使えちゃうもんね。
というわけで、「.gitignore」ファイル(git管理しないファイル名を載せておく。ここに記載されているファイルはgit管理されないので、githubに載らない)にこのファイルを記載しておきます。
.gitignore
でも、s3.ymlっていうファイルがこのアプリには必要なんだよ、ってのをgithub上に残しておくために、「s3.yml.example」っていうファイルを作って、おく。
config/s3.yml.example
こうしておくことで、githubからクローンした際にここに正しい値の入力が必要なことがわかる。
さて、これで設定は終わり。
では早速投稿してみよー!!
・・・あかん、エラーや(T△T)
NameError (uninitialized constant Paperclip::Storage::S3::AWS):って出てる。
うぉぉん・・・Google先生〜!!!
NameError (uninitialized constant Paperclip::Storage::S3::AWS): by stack overflow
ををを・・・まんま自分と同じ悩み(w
どうやらgem 'aws-sdk'のバージョンを2.0未満に指定するといいよ、とのこと。
今入ってるのは2.1.23だからバージョンを下げるんだな。
やってみよう。
gem fileの記載をgem 'aws-sdk', '< 2.0'に変更。
bundle installして、念のためrails sしなおして、投稿にリトライ!!
やったぁぁ!!!通った〜〜〜!!!
ちゃんとS3に画像ファイルが保存されたーーー!!!
S3のバケットの中に画像ファイルが入ってるー!!!
いやー、よかたよかた(T▽T)
大きな一歩です!!!
なーんて考えていたんですが。
先「そのままherokuに公開すると、画像が消えるよ?」
N「え?!なんで?!」
先「Heroku上では,ファイルをサーバ上に保存するということができません」
N「?」
先「おまいが昨日必死にアップロードしようとしていたものは金の斧ですか?銀の斧ですか?それとも画像ファイルですか?」
N「画像ファイルです」
先「正直者め(w。PG Commanderでmemosテーブルの中身見てみ」
N「パイセン、imageファイルの名前とか画像の種類とかの概要は書いてあるけど、中身そのものはないっす」
先「保存した画像ファイルはどこにあるんでしょーかっ?」
N「・・・わかんねぇっす。ここに入ってると思ってたっす(T△T)」
先「ねこてちょうのアプリのpublicってとこに入ってます。つまり、画像ファイルはPostgreSQLには入ってません」
N「ありゃー。私、画像ファイルを文字列?暗号?みたいにして保存してるのかと思ってました」
先「残念」
N「てことは、あれですか?画像ファイルは別のとこにあって、memosテーブルにあるデータは索引みたいなもん?」
先「です」
N「で、herokuには画像ファイルは保存できない、と」
先「Yes」
N「・・・別のとこに保存・・・する?」
先「そうでーす。よくできました。今回はAWSのS3をお使いなさい。herokuとS3でファイルアップロードというのはけっこうポピュラー」
N「らじゃー」
実際はもっと真面目なやりとりでしたが、上記のようなことを教えてもらったので、Google先生に「heroku S3」とお伺いしたところ、いっぱい出てきました。
おおお・・・ぽぴゅらー(w
というわけで、herokuを使う前にまずはAWS(Amazon Web Service)のS3の導入です。
Amazon S3(クラウドストレージサービス)
アカウントの登録せにゃならんので、「まずは無料ではじめる」ボタンをクリック。
英語のサイトですなぁ・・・。入力はなんとかなった(w
うぇっ、個人認証に電話が必要なのかぁ。英語だよなぁ。聞き取れるかなぁ。
あ、意外と聞き取れた!まぁ、画像に表示されてるPINナンバー入れてね(^^)さえ聞き取れればなんとかなるという(w
無事S3のアカウント登録終了。
登録が終わると「アカウントのアクティベーション中です!少々お待ちください!」となるので、その間に次の作業をしておきます。
今回の作業の参照元はコチラ。
RailsでPaperclipを使ってAmazon S3に画像を保存する
※若干古めの記事なのでちょっと気をつけておこう・・・。
[ok] gem 'aws-sdk'(S3にファイルをアップロードするためのgem)を入れる。
次、Memoモデルに画像用の設定をします。
すでにPaperclip用の設定が書かれているので、それに付け足す形になります。
app/models/memo.rb
has_attached_file
# PaperClip用の設定
:image,
:styles => { medium: "400x400>" },
# S3用の設定
:storage => :s3,
:s3_credentials => "#{Rails.root}/config/s3.yml",
:path => ":attachment/:id/:style.:extension"
# PaperClip用の設定
:image,
:styles => { medium: "400x400>" },
# S3用の設定
:storage => :s3,
:s3_credentials => "#{Rails.root}/config/s3.yml",
:path => ":attachment/:id/:style.:extension"
次にAmazon S3の設定情報をAWSから取得します。
AWSのコンソールのの右上にある名前のドロップダウンリストから「認証情報」を選択します。
セキュリティ認証情報のアクセスキーの箇所でアクセスキーIDとシークレットアクセスキーをダウンロードしておきます。
画像を保存するためのバケット(保存場所)をS3に作ります。
※バケットて日本語で言うとバケツ、桶ね。
コンソールのトップ画面に戻って、ストレージ&コンテンツ配信の下にあるS3を選択。
「バケットの作成」ボタンをクリック。
ここでバケットの名前を入れて、リージョンを選べって出ます。
名前・・・名前?バケツの名前?
・・・なーんかちょっと嫌な予感。こういうのって絶対何かコツとかルールとかやっちゃいけない系とかあるんだよな。
Google先生〜!!!
S3でHTTPSを使いたかったらバケット名にピリオド入れちゃダメ
やっぱあった(T皿T)
名前はドメイン名を入れることが多いみたい。まだドメイン名ないけど・・・nekotecho.comかな?
で、バケット名にピリオドは入れない方がいいみたいなので、「nekotecho-com」にしておこうか。
nekotecho.com取れるかどうかわかんないけど(^^;
リージョンは東京で。
よし、バケット作った!
んじゃ次!
「config/s3.yml」を新規に作成します。
configの直下にs3.ymlっていうファイルを作成。Sublimetext上でやっちゃう!!(w
中身はこちら!(アクセスキーとかは伏せさせてもらってます)
# config/s3.yml
bucket: nekotecho-com
access_key_id: ****************
secret_access_key: ******************
s3_host_name: s3-ap-northeast-1.amazonaws.com
bucket: nekotecho-com
access_key_id: ****************
secret_access_key: ******************
s3_host_name: s3-ap-northeast-1.amazonaws.com
で、このconfig_s3.ymlはgithubには絶対載せてはいけないファイルだそう。
そう言われればそうか。この設定内容がわかったら他の人が使えちゃうもんね。
というわけで、「.gitignore」ファイル(git管理しないファイル名を載せておく。ここに記載されているファイルはgit管理されないので、githubに載らない)にこのファイルを記載しておきます。
.gitignore
/config/s3.yml
でも、s3.ymlっていうファイルがこのアプリには必要なんだよ、ってのをgithub上に残しておくために、「s3.yml.example」っていうファイルを作って、おく。
config/s3.yml.example
# config/s3.yml
bucket: Your Bucket Name
access_key_id: Your AccessKeyID
secret_access_key: Your SecretAccessKey
s3_host_name: s3-ap-northeast-1.amazonaws.com
bucket: Your Bucket Name
access_key_id: Your AccessKeyID
secret_access_key: Your SecretAccessKey
s3_host_name: s3-ap-northeast-1.amazonaws.com
こうしておくことで、githubからクローンした際にここに正しい値の入力が必要なことがわかる。
さて、これで設定は終わり。
では早速投稿してみよー!!
・・・あかん、エラーや(T△T)
NameError (uninitialized constant Paperclip::Storage::S3::AWS):って出てる。
うぉぉん・・・Google先生〜!!!
NameError (uninitialized constant Paperclip::Storage::S3::AWS): by stack overflow
ををを・・・まんま自分と同じ悩み(w
どうやらgem 'aws-sdk'のバージョンを2.0未満に指定するといいよ、とのこと。
今入ってるのは2.1.23だからバージョンを下げるんだな。
やってみよう。
gem fileの記載をgem 'aws-sdk', '< 2.0'に変更。
bundle installして、念のためrails sしなおして、投稿にリトライ!!
やったぁぁ!!!通った〜〜〜!!!
ちゃんとS3に画像ファイルが保存されたーーー!!!
S3のバケットの中に画像ファイルが入ってるー!!!
いやー、よかたよかた(T▽T)
大きな一歩です!!!
※コメント投稿者のブログIDはブログ作成者のみに通知されます