Rails6 bata2でActionTextを試してみる

2/25リリースの6.0.0.beta2で試してみました。DBにはsqlite3を使用しています。

Rubyとnode.jsのバージョン指定

rbenvとndenvを使用して管理しているので、下記のように設定しました。

echo 2.5.1 > .ruby-version
echo v11.10.1 > .node-version

Rubyのバージョンが古いと下記の様なエラーがでるのでRubyのバージョンは2.5.0以上を指定する必要があります。

Bundler could not find compatible versions for gem "ruby":
  In Gemfile:
    ruby

    rails (~> 6.0.0.beta2) was resolved to 6.0.0.beta2, which depends on
      ruby (>= 2.5.0)

Railsのインストール

bundle init
echo "gem 'rails', '~> 6.0.0.beta2'" >> Gemfile
echo /vendor/bundle >> .gitignore
bundle install --path vendor/bundle
bundle exec rails new .

とすればRailsの準備は完了です。

DBのMigration

bin/rails db:create
bin/rails db:migrate

ActionTextの準備

bundle exec rails action_text:install
echo "gem 'image_processing'" >> Gemfile
bundle install --path vendor/bundle

ImageMagickのインストール

ImageMagick(又はGraphicsMagick)が入っていなかったらインストールします。

brew install imagemagick

Postモデル作成

bundle exec rails generate scaffold Post title:string
bundle exec rails db:migrate

動かしてみる

bundle exec rails s

記事作成

/posts/newにアクセスして新規作成します、リッチテキストエディタがついていて画像もD&Dできます。

編集

記事表示

Create Postを押すと表示されます。

表示

表示

リッチテキスト部分のHTMLは↓のようになっていました。ActionTextではtrixというライブラリが使われているようで、classにtrix-contentというクラスがついていました。

<div class="trix-content">
<div>
<strong>ActionText</strong><br><action-text-attachment sgid="BAh7CEkiCGdpZAY6BkVUSSI3Z2lkOi8vYWN0aW9uLXRleHQvQWN0aXZlU3RvcmFnZTo6QmxvYi8xP2V4cGlyZXNfaW4GOwBUSSIMcHVycG9zZQY7AFRJIg9hdHRhY2hhYmxlBjsAVEkiD2V4cGlyZXNfYXQGOwBUMA==--212aa139f16ce3056de2e530229443bb7638826f" content-type="image/png" url="http://localhost:3000/rails/active_storage/blobs/eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaHBCZz09IiwiZXhwIjpudWxsLCJwdXIiOiJibG9iX2lkIn19--650279ed9ee7b4a7c17ee4483d47b125d6a57596/rails.png" filename="rails.png" filesize="295708" width="1154" height="774" previewable="true" presentation="gallery"><figure class="attachment attachment--preview attachment--png">
    <img src="http://localhost:3000/rails/active_storage/representations/eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaHBCZz09IiwiZXhwIjpudWxsLCJwdXIiOiJibG9iX2lkIn19--650279ed9ee7b4a7c17ee4483d47b125d6a57596/eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaDdCam9VY21WemFYcGxYM1J2WDJ4cGJXbDBXd2RwQWdBRWFRSUFBdz09IiwiZXhwIjpudWxsLCJwdXIiOiJ2YXJpYXRpb24ifX0=--58d955dca830fe0c65cc0103d0b56194b9c573e7/rails.png">

  <figcaption class="attachment__caption">
      <span class="attachment__name">rails.png</span>
      <span class="attachment__size">289 KB</span>
  </figcaption>
</figure></action-text-attachment>
</div>
</div>

テーブル一覧

  • action_text_rich_texts
  • ar_internal_metadata
  • active_storage_attachments
  • posts
  • active_storage_blobs
  • schema_migrations

データ

ここまで実行してデータベースにどんなデータが入っているか調べてみました。それぞれ一行目がカラム名になっています。

action_text_rich_texts

リッチテキストを保存するテーブルではtrix-contentクラス内のデータがそのまま入っていました。

id|name|body|record_type|record_id|created_at|updated_at
1|content|<div><strong>ActionText</strong><br><action-text-attachment sgid="BAh7CEkiCGdpZAY6BkVUSSI3Z2lkOi8vYWN0aW9uLXRleHQvQWN0aXZlU3RvcmFnZTo6QmxvYi8xP2V4cGlyZXNfaW4GOwBUSSIMcHVycG9zZQY7AFRJIg9hdHRhY2hhYmxlBjsAVEkiD2V4cGlyZXNfYXQGOwBUMA==--212aa139f16ce3056de2e530229443bb7638826f" content-type="image/png" url="http://localhost:3000/rails/active_storage/blobs/eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaHBCZz09IiwiZXhwIjpudWxsLCJwdXIiOiJibG9iX2lkIn19--650279ed9ee7b4a7c17ee4483d47b125d6a57596/rails.png" filename="rails.png" filesize="295708" width="1154" height="774" previewable="true" presentation="gallery"></action-text-attachment></div>|Post|1|2019-03-02 21:03:15.780497|2019-03-02 21:17:28.620250

urlの部分にドメインやポート番号まで含まれたURLが入っていたのでport番号を変更して立ち上げて確認してみましたが、リクエストではちゃんとポート番号が変更されてリクエストが送られていました。どこで変更しているかまでは調べていません。

画像リクエスト

ar_internal_metadata

environmentの情報が入っていてDBのdropタスクなどで間違えて消さないようにするために使われているようです。

key|value|created_at|updated_at
environment|development|2019-03-02 20:40:18.832305|2019-03-02 20:40:18.832305

active_storage_attachments

id|name|record_type|record_id|blob_id|created_at
1|embeds|ActionText::RichText|1|1|2019-03-02 21:03:15.842697

posts

id|title|created_at|updated_at
1|test|2019-03-02 21:03:15.722712|2019-03-01 21:17:28.714240

active_storage_blobs

画像データのファイル名や保存場所などが記録されているデータのようです。

id|key|filename|content_type|metadata|byte_size|checksum|created_at
1|9gpw4sr15j24q3de7qd6a3vj8ly8|rails.png|image/png|{"identified":true,"analyzed":true}|295708|LFFuycb6VcPiPXgSWOXaIQ==|2019-03-02 21:03:01.141964

ローカルストレージの場合↓のようにstorageディレクトリ以下にkeyを頭から2文字ずつ計4文字分をディレクトリに分けて保存されていました。

storage/9g/pw/9gpw4sr15j24q3de7qd6a3vj8ly8

S3に保存した場合など、webサーバーを通さないで配信する場合どうなるのかとかを今後調べてみたいです。

schema_migrations

version
20190301023849
20190301023850
20190301025408

参照