

herokuで動いているプロジェクトにheroku run rails cで画像を追加したいです。

現状はこのように画像のパスを指定して、データを追加しました。

[code]

    pry(main)> Article.create(title: '開発楽しい',  content: 'とくにRails' image: File.open("app/assets/images/dev/Rails.jpg", "r"))
    
[/code]

しかし、Webで見ると画像ではなく、%e9&87%91%..と表示されてしまいます。  
これは何を表しているのでしょうか。

また調べたところ、公開する静的なファイルはpublic/assetsの中に入れるとあったのですが、そのpathをFile.openの中に指定すると`No
such file or directory @ rb_sysopen`と弾かれてしまいます。

herokuのrails cから画像をアップロードする方法を教えていただきたいです。  
よろしくお願いいたします。


CC BY-SA 3.0
2015-11-18T09:10:47.787
18988
2015-11-19T21:23:14.593
13210
question
ruby-on-rails heroku
herokuにrails cでimageカラムに画像パスを追加する方法


Herokuはdynoが再起動されるとファイルが消えるのでS3に保存しましょう。画像の部分は実装依存なので何とも言えません。

<https://devcenter.heroku.com/articles/s3>


CC BY-SA 3.0
2015-11-18T10:02:41.397
18993
2015-11-18T10:02:41.397
226
18988
answer


アップロードされたファイルのデータをそのままデータベースに格納するのであれば、`File.open`をつかうのは上手く行かないと思われます。理由は[言語リファレンス](http://docs.ruby-
lang.org/ja/2.2.0/class/File.html#S_NEW)を見る限りでは、`File.open`の戻り値はFileオブジェクトそのものであって、ファイルのデータではないからと思われるからです。

(File.openの説明から抜粋)

> path で指定されるファイルをオープンし、File オブジェクトを生成して 返します。

ファイルシステムのファイルを読み込むのであるなら`read`メソッドを使えば上手く行くのではないでしょうか。

([IO#read](http://docs.ruby-lang.org/ja/2.2.0/method/IO/i/read.html)からの抜粋)

> `read(length = nil, outbuf = "") -> String`
>
> length バイト読み込んで、その文字列を返します。  
>  引数 length が指定された場合はバイナリ読み込みメソッド、  
>  そうでない場合はテキスト読み込みメソッドとして 動作します。 既に EOF に達していれば nil を返します。 ただし、length  
>  に nil か 0 が指定されている場合は、空文字列 "" を返します。  
>  例えば、open(空ファイル) {|f| f.read } は "" となります。

手元の環境で確認できず、言語リファレンスを見ての回答になってます。すみませんが実際に実行確認してみてください。


CC BY-SA 3.0
2015-11-19T10:19:16.543
19045
2015-11-19T21:23:14.593
2015-11-19T21:23:14.593
9403
9403
18988
answer