{"id":2566,"date":"2021-12-18T04:42:01","date_gmt":"2021-12-17T19:42:01","guid":{"rendered":"https:\/\/suzutukiblog.com\/?p=2566"},"modified":"2022-03-07T19:57:07","modified_gmt":"2022-03-07T10:57:07","slug":"rails-3","status":"publish","type":"post","link":"https:\/\/suzutukiblog.com\/index.php\/2021\/12\/18\/rails-3\/","title":{"rendered":"\u753b\u50cf\u6295\u7a3f\u6a5f\u80fd\u306e\u5b9f\u88c5(Docker+rails+carrierwave+fog-aws+rmagick)"},"content":{"rendered":"<h3>\u76ee\u6a19\uff1a\u30e6\u30fc\u30b6\u30fc\u306e\u30d7\u30ed\u30d5\u30a3\u30fc\u30eb\u306b\u753b\u50cf\u3092\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\u3057\u3066\u8a2d\u5b9a\u3067\u304d\u308b\u3088\u3046\u306b\u3057\u305f\u3044<\/h3>\n<p>\u4ee5\u4e0b\u306eGem\u3092Gemfile\u306b\u8a18\u8ff0\u3057\u307e\u3059\u3002<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-2568\" src=\"https:\/\/suzutukiblog.com\/wp-content\/uploads\/2021\/04\/0498e91c768dc4ed107efdb0be46d7e2.png\" alt=\"\" width=\"530\" height=\"148\" srcset=\"https:\/\/suzutukiblog.com\/wp-content\/uploads\/2021\/04\/0498e91c768dc4ed107efdb0be46d7e2.png 530w, https:\/\/suzutukiblog.com\/wp-content\/uploads\/2021\/04\/0498e91c768dc4ed107efdb0be46d7e2-300x84.png 300w\" sizes=\"auto, (max-width: 530px) 100vw, 530px\" \/><\/p>\n<h3>\u30b3\u30f3\u30c6\u30ca\u3092\u518d\u8d77\u52d5\u3059\u308b<\/h3>\n<pre>docker-compose stop\r\n\r\ndocker-compose down\r\n\r\ndocker-compose build<\/pre>\n<pre><strong>#\u30a2\u30c3\u30d7\u30ed\u30fc\u30c0\u30fc\u3092\u751f\u6210\u3059\u308b\r\ndocker-compose exec web rails g uploader Image<\/strong><\/pre>\n<p>user\u30e2\u30c7\u30eb\u306b\u753b\u50cf\u3092\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\u3059\u308b\u305f\u3081\u306bimage\u30ab\u30e9\u30e0\u3092\u8ffd\u52a0\u3057\u307e\u3059\u3002<\/p>\n<pre><strong>docker-compose run web bundle exec rails g migration AddImageToUsers user image:string<\/strong><\/pre>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-2649\" src=\"https:\/\/suzutukiblog.com\/wp-content\/uploads\/2021\/02\/2942dd66e21b9c8f460658aaf1e8a044.png\" alt=\"\" width=\"1018\" height=\"310\" srcset=\"https:\/\/suzutukiblog.com\/wp-content\/uploads\/2021\/02\/2942dd66e21b9c8f460658aaf1e8a044.png 1018w, https:\/\/suzutukiblog.com\/wp-content\/uploads\/2021\/02\/2942dd66e21b9c8f460658aaf1e8a044-300x91.png 300w, https:\/\/suzutukiblog.com\/wp-content\/uploads\/2021\/02\/2942dd66e21b9c8f460658aaf1e8a044-768x234.png 768w, https:\/\/suzutukiblog.com\/wp-content\/uploads\/2021\/02\/2942dd66e21b9c8f460658aaf1e8a044-624x190.png 624w\" sizes=\"auto, (max-width: 1018px) 100vw, 1018px\" \/><\/p>\n<p>\u30de\u30a4\u30b0\u30ec\u30fc\u30c8\u3057\u307e\u3059<\/p>\n<p><!--more--><\/p>\n<pre><strong>docker-compose run web bundle exec rake db:migrate<\/strong><\/pre>\n<p>CarrierWave\u3092\u5c0e\u5165\u3059\u308b\u3068\u3001Rails\u306e\u30b8\u30a7\u30cd\u30ec\u30fc\u30bf\u30fc\u3067\u753b\u50cf\u30a2\u30c3\u30d7\u30ed\u30fc\u30c0\u30fc\u304c\u751f\u6210\u3067\u304d\u308b\u3088\u3046\u306b\u306a\u308a\u307e\u3059\u3002<\/p>\n<p>user.rb\u306b\u4ee5\u4e0b\u306e\u8a18\u8ff0\u3092\u8ffd\u52a0\u3057\u307e\u3059\u3002<\/p>\n<pre><strong>mount_uploader :image, ImageUploader<\/strong><\/pre>\n<p>users_controller\u306e\u30b9\u30c8\u30ed\u30f3\u30b0\u30d1\u30e9\u30e1\u30fc\u30bf\u30fc\u306b\u4ee5\u4e0b\u306e\u8a18\u8ff0\u3092\u8ffd\u52a0\u3057\u307e\u3059\u3002<\/p>\n<pre><strong>def user_params<\/strong>\r\n<strong>  params.require(:user).permit(:name, :email, :password,<\/strong>\r\n<strong>                               :password_confirmation, :image, :image_cache)<\/strong>\r\n<strong>end<\/strong><\/pre>\n<h3>image_uploader.rb\u306b\u4ee5\u4e0b\u306e\u8a18\u8ff0\u3092\u8ffd\u52a0<\/h3>\n<pre>class ImageUploader &lt; CarrierWave::Uploader::Base\r\n\r\n# \u753b\u50cf\u30b5\u30a4\u30ba\u3092\u53d6\u5f97\u3059\u308b\u305f\u3081\u306bRMagick\u4f7f\u7528\r\n  include CarrierWave::RMagick\r\n\r\n# \u3053\u306e\u30a2\u30c3\u30d7\u30ed\u30fc\u30c0\u3067\u4f7f\u7528\u3059\u308b\u30b9\u30c8\u30ec\u30fc\u30b8\u306e\u7a2e\u985e\u3092\u9078\u629e\u3057\u307e\u3059\u3002\r\n# development\u3068test\u4ee5\u5916\u306fS3\u3092\u4f7f\u7528\r\nif Rails.env.development? || Rails.env.test?\r\n  storage :file\r\nelse\r\n  storage :fog\r\nend\r\n\r\n# \u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\u3055\u308c\u305f\u30d5\u30a1\u30a4\u30eb\u304c\u4fdd\u5b58\u3055\u308c\u308b\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u3092\u4e0a\u66f8\u304d\u3057\u307e\u3059\u3002\r\n# \u3053\u308c\u306f\u3001\u30de\u30a6\u30f3\u30c8\u3055\u308c\u308b\u3053\u3068\u3092\u524d\u63d0\u3068\u3057\u305f\u30a2\u30c3\u30d7\u30ed\u30fc\u30c0\u306e\u305f\u3081\u306e\u3001\u8ce2\u660e\u306a\u30c7\u30d5\u30a9\u30eb\u30c8\u3067\u3059\u3002\r\n# \u753b\u50cf\u3054\u3068\u306b\u4fdd\u5b58\u3059\u308b\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u3092\u5909\u3048\u308b\r\ndef store_dir\r\n  \"uploads\/#{model.class.to_s.underscore}\/#{mounted_as}\/#{model.id}\"\r\nend\r\n\r\n# \u8a31\u53ef\u3059\u308b\u753b\u50cf\u306e\u62e1\u5f35\u5b50\r\ndef extension_whitelist\r\n  %w(jpg jpeg gif png)\r\nend\r\n\r\n#\u753b\u50cf\u306e\u6700\u5927\u30b5\u30a4\u30ba\u3092\uff15MB\u672a\u6e80\u306b\u3059\u308b\r\ndef size_range\r\n  1..5.megabytes\r\nend\r\n\r\n# \u753b\u50cf\u306e\u4e0a\u9650\u3092640x480\u306b\u3059\u308b\r\nprocess :resize_to_limit =&gt; [640, 480]\r\n\r\n# \u4fdd\u5b58\u5f62\u5f0f\u3092JPG\u306b\u3059\u308b\r\nprocess :convert =&gt; 'jpg'\r\n\r\n# \u30b5\u30e0\u30cd\u30a4\u30eb\u3092\u751f\u6210\u3059\u308b\u8a2d\u5b9aedit\u7528\r\nversion :thumb do\r\n  process :resize_to_limit =&gt; [400, 400]\r\nend\r\n\uff03 \u30e6\u30fc\u30b6\u30fc\u7ba1\u7406\u753b\u9762\u7528\r\nversion :thumb100 do\r\n  process :resize_to_limit =&gt; [100, 100]\r\nend\r\n\r\n# \u62e1\u5f35\u5b50\u304c\u540c\u3058\u3067\u306a\u3044\u3068GIF\u3092JPG\u3068\u304b\u306b\u30b3\u30f3\u30d0\u30fc\u30c8\u3067\u304d\u306a\u3044\u306e\u3067\u3001\u30d5\u30a1\u30a4\u30eb\u540d\u3092\u5909\u66f4\r\ndef filename\r\n  super.chomp(File.extname(super)) + '.jpg' if original_filename.present?\r\nend\r\n\r\n# \u30d5\u30a1\u30a4\u30eb\u540d\u3092\u65e5\u4ed8\u306b\u3059\u308b\u3068\u30bf\u30a4\u30df\u30f3\u30b0\u306e\u305b\u3044\u3067\u30b5\u30e0\u30cd\u30a4\u30eb\u540d\u304c\u305a\u308c\u3066\u30a8\u30e9\u30fc\u306b\u306a\u308b\u306e\u3067\r\n#\u30d5\u30a1\u30a4\u30eb\u540d\u3092\u30e9\u30f3\u30c0\u30e0\u3067\u4e00\u610f\u306b\u3059\u308b\r\ndef filename\r\n  \"#{secure_token}.#{file.extension}\" if original_filename.present?\r\nend\r\n\r\nprotected\r\n\r\ndef secure_token\r\n  var = :\"@#{mounted_as}_secure_token\"\r\n  model.instance_variable_get(var) or model.instance_variable_set(var, SecureRandom.uuid)\r\nend\r\n\r\nend<\/pre>\n<div><\/div>\n<div><span style=\"font-size: 1rem;\"><strong>\/app\/views\/users\/new.html.erb<\/strong>\u306b\u4ee5\u4e0b\u306e\u8a18\u8ff0\u3092\u8ffd\u52a0<\/span><\/div>\n<div>\n<div class=\"code-copy\"><\/div>\n<div class=\"highlight\">\n<pre>&lt;%= form_with model: @user, local: true do |f| %&gt;\r\n  &lt;%= image_tag @user.image.thumb.url if @user.image? %&gt;\r\n  &lt;%= render 'shared\/error_messages', object: f.object %&gt;\r\n  &lt;div class=\"inputWithIcon\"&gt;\r\n    &lt;%= f.text_field :name, class: 'form-field', placeholder: 'Your name' %&gt;\r\n    &lt;%= f.email_field :email, class: 'form-field', placeholder: 'Email' %&gt;\r\n    &lt;%= f.password_field :password, class: 'form-field', placeholder: '\u30d1\u30b9\u30ef\u30fc\u30c9' %&gt;\r\n    &lt;%= f.password_field :password_confirmation, class: 'form-field', placeholder: '\u30d1\u30b9\u30ef\u30fc\u30c9\u78ba\u8a8d' %&gt;\r\n  &lt;\/div&gt;\r\n  &lt;%= f.label :\u30d7\u30ed\u30d5\u30a3\u30fc\u30eb\u753b\u50cf\u3092\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\u3067\u304d\u307e\u3059\u3002 %&gt;\r\n  &lt;div class=\"file-upload_area\"&gt;\r\n    <strong>&lt;%= f.file_field :image, class: 'file-upload_input' %&gt;<\/strong>\r\n<strong>    &lt;%= f.hidden_field :image_cache %&gt;<\/strong>\r\n  &lt;\/div&gt;\r\n  &lt;div class=\"center-position\"&gt;\r\n    &lt;%= f.submit yield(:button_text), class: \" btn float\" %&gt;\r\n  &lt;\/div&gt;<\/pre>\n<\/div>\n<\/div>\n<div>\n<p>:image_cache\u306f<\/p>\n<\/div>\n<div>\u4ed6\u306e\u5165\u529b\u9805\u76ee\u306e\u30d0\u30ea\u30c7\u30fc\u30b7\u30e7\u30f3\u306b\u5f15\u3063\u304b\u304b\u3063\u305f\u6642\u3001\u3082\u3046\uff11\u56de\u753b\u50cf\u3092\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\u3057\u306a\u304f\u3066\u3082\u826f\u304f\u306a\u308b<\/div>\n<div><\/div>\n<div class=\"code-lang\"><span class=\"bold\"><strong>\/app\/views\/users\/show.html.erb<\/strong>\u306e\u8a18\u8ff0<\/span><\/div>\n<pre>&lt;% @users.each do |user| %&gt;\r\n    &lt;%= user.name %&gt;\r\n    &lt;%= user.email %&gt;\r\n    &lt;% if user.image? %&gt;\r\n      &lt;%= image_tag user.image.thumb100.url %&gt;\r\n    &lt;% end %&gt;<\/pre>\n<p>\u30e6\u30fc\u30b6\u30fc\u7ba1\u7406\u753b\u9762\u306b\u753b\u50cf\u304c\u53cd\u6620\u3055\u308c\u3066\u3044\u308c\u3070OK<\/p>\n<p>\u7de8\u96c6\u753b\u9762<strong>app\/views\/users\/edit.html.erb<\/strong>\u306b\u4ee5\u4e0b\u306e\u8a18\u8ff0\u3092\u8ffd\u52a0<\/p>\n<pre>&lt;%= user.text_field :name, class: 'form-field', placeholder: 'Your name' %&gt;\r\n&lt;%= user.email_field :email, class: 'form-field', placeholder: 'Email' %&gt;\r\n&lt;%= user.password_field :password, class: 'form-field', placeholder: '\u30d1\u30b9\u30ef\u30fc\u30c9' %&gt;\r\n&lt;%= user.password_field :password_confirmation, class: 'form-field', placeholder: '\u30d1\u30b9\u30ef\u30fc\u30c9\u78ba\u8a8d' %&gt;\r\n&lt;%= user.label :\u30d7\u30ed\u30d5\u30a3\u30fc\u30eb\u753b\u50cf\u3092\u5909\u66f4\u3067\u304d\u307e\u3059\u3002 %&gt;\r\n  &lt;div class=\"file-upload_area\"&gt;\r\n&lt;%= user.file_field :image, class: 'file-upload_input' %&gt;\r\n  &lt;\/div&gt;\r\n&lt;%= user.submit yield(:button_text), class: \"btn float\" %&gt;\r\n    &lt;% if logged_in? &amp;&amp; !guest_user %&gt;\r\n&lt;%= link_to \"\u9000\u4f1a\", @user, method: :delete,\r\n          data: { confirm: \"\u672c\u5f53\u306b\u9000\u4f1a\u3057\u307e\u3059\u304b\uff1f\" } %&gt;\r\n    &lt;% end %&gt;<\/pre>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-2659\" src=\"https:\/\/suzutukiblog.com\/wp-content\/uploads\/2021\/04\/b22bf715f8bff9ae1807bd332fa15b86.png\" alt=\"\" width=\"957\" height=\"714\" srcset=\"https:\/\/suzutukiblog.com\/wp-content\/uploads\/2021\/04\/b22bf715f8bff9ae1807bd332fa15b86.png 957w, https:\/\/suzutukiblog.com\/wp-content\/uploads\/2021\/04\/b22bf715f8bff9ae1807bd332fa15b86-300x224.png 300w, https:\/\/suzutukiblog.com\/wp-content\/uploads\/2021\/04\/b22bf715f8bff9ae1807bd332fa15b86-768x573.png 768w, https:\/\/suzutukiblog.com\/wp-content\/uploads\/2021\/04\/b22bf715f8bff9ae1807bd332fa15b86-624x466.png 624w\" sizes=\"auto, (max-width: 957px) 100vw, 957px\" \/><\/p>\n<p>\u30d5\u30a1\u30a4\u30eb\u3092\u9078\u629e\u3057\u3066\u7de8\u96c6\u3067\u304d\u3066\u3044\u308c\u3070OK\u3067\u3059\uff01<\/p>\n<p>\/config\/locales\/carrierwave_ja.yml\u306b\u4ee5\u4e0b\u306e\u8a18\u8ff0\u3092\u8ffd\u52a0<\/p>\n<pre>ja:\r\n  errors:\r\n    messages:\r\n      record_invalid: '\u30d0\u30ea\u30c7\u30fc\u30b7\u30e7\u30f3\u306b\u5931\u6557\u3057\u307e\u3057\u305f: %{errors}'\r\n      restrict_dependent_destroy:\r\n        has_one: \"%{record}\u304c\u5b58\u5728\u3057\u3066\u3044\u308b\u306e\u3067\u524a\u9664\u3067\u304d\u307e\u305b\u3093\"\r\n        has_many: \"%{record}\u304c\u5b58\u5728\u3057\u3066\u3044\u308b\u306e\u3067\u524a\u9664\u3067\u304d\u307e\u305b\u3093\"\r\n      carrierwave_processing_error: \"\u51e6\u7406\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f\"\r\n      carrierwave_integrity_error: \"\u306f\u8a31\u53ef\u3055\u308c\u3066\u3044\u306a\u3044\u30d5\u30a1\u30a4\u30eb\u30bf\u30a4\u30d7\u3067\u3059\"\r\n      carrierwave_download_error: \"\u306f\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u3067\u304d\u307e\u305b\u3093\"\r\n      extension_whitelist_error: \"%{extension}\u30d5\u30a1\u30a4\u30eb\u306e\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\u306f\u8a31\u53ef\u3055\u308c\u3066\u3044\u307e\u305b\u3093\u3002\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\u3067\u304d\u308b\u30d5\u30a1\u30a4\u30eb\u30bf\u30a4\u30d7: %{allowed_types}\"\r\n      extension_blacklist_error: \"%{extension}\u30d5\u30a1\u30a4\u30eb\u306e\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\u306f\u8a31\u53ef\u3055\u308c\u3066\u3044\u307e\u305b\u3093\u3002\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\u3067\u304d\u306a\u3044\u30d5\u30a1\u30a4\u30eb\u30bf\u30a4\u30d7: %{prohibited_types}\"\r\n      content_type_whitelist_error: \"%{content_type}\u30d5\u30a1\u30a4\u30eb\u306e\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\u306f\u8a31\u53ef\u3055\u308c\u3066\u3044\u307e\u305b\u3093\"\r\n      content_type_blacklist_error: \"%{content_type}\u30d5\u30a1\u30a4\u30eb\u306e\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\u306f\u8a31\u53ef\u3055\u308c\u3066\u3044\u307e\u305b\u3093\"\r\n      rmagick_processing_error: \"rmagick\u304c\u30d5\u30a1\u30a4\u30eb\u3092\u51e6\u7406\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f\u3002\u753b\u50cf\u3092\u78ba\u8a8d\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u30a8\u30e9\u30fc\u30e1\u30c3\u30bb\u30fc\u30b8: %{e}\"\r\n      mini_magick_processing_error: \"MiniMagick\u304c\u30d5\u30a1\u30a4\u30eb\u3092\u51e6\u7406\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f\u3002\u753b\u50cf\u3092\u78ba\u8a8d\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u30a8\u30e9\u30fc\u30e1\u30c3\u30bb\u30fc\u30b8: %{e}\"\r\n      min_size_error: \"\u30d5\u30a1\u30a4\u30eb\u3092%{min_size}\u4ee5\u4e0a\u306e\u30b5\u30a4\u30ba\u306b\u3057\u3066\u304f\u3060\u3055\u3044\"\r\n      max_size_error: \"\u30d5\u30a1\u30a4\u30eb\u3092%{max_size}\u672a\u6e80\u306e\u30b5\u30a4\u30ba\u306b\u3057\u3066\u304f\u3060\u3055\u3044\"\r\ndate:<\/pre>\n<p>\u30a8\u30e9\u30fc\u304c\u65e5\u672c\u8a9e\u3067\u8868\u793a\u3055\u308c\u305f\u306e\u3092\u78ba\u8a8d\u3057\u305f\u3089OK\u3067\u3059\uff01<img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-2665\" src=\"https:\/\/suzutukiblog.com\/wp-content\/uploads\/2021\/02\/a01f31f345df3ea0622e986fb790fc3b.png\" alt=\"\" width=\"898\" height=\"194\" srcset=\"https:\/\/suzutukiblog.com\/wp-content\/uploads\/2021\/02\/a01f31f345df3ea0622e986fb790fc3b.png 898w, https:\/\/suzutukiblog.com\/wp-content\/uploads\/2021\/02\/a01f31f345df3ea0622e986fb790fc3b-300x65.png 300w, https:\/\/suzutukiblog.com\/wp-content\/uploads\/2021\/02\/a01f31f345df3ea0622e986fb790fc3b-768x166.png 768w, https:\/\/suzutukiblog.com\/wp-content\/uploads\/2021\/02\/a01f31f345df3ea0622e986fb790fc3b-624x135.png 624w\" sizes=\"auto, (max-width: 898px) 100vw, 898px\" \/><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u76ee\u6a19\uff1a\u30e6\u30fc\u30b6\u30fc\u306e\u30d7\u30ed\u30d5\u30a3\u30fc\u30eb\u306b\u753b\u50cf\u3092\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\u3057\u3066\u8a2d\u5b9a\u3067\u304d\u308b\u3088\u3046\u306b\u3057\u305f\u3044 \u4ee5\u4e0b\u306eGem\u3092Gemfile\u306b\u8a18\u8ff0\u3057\u307e\u3059\u3002 \u30b3\u30f3\u30c6\u30ca\u3092\u518d\u8d77\u52d5\u3059\u308b docker-compose stop docker-compose down [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":2659,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"footnotes":""},"categories":[23,27,13],"tags":[],"class_list":["post-2566","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-docker","category-programming-note","category-rails"],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/suzutukiblog.com\/index.php\/wp-json\/wp\/v2\/posts\/2566","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/suzutukiblog.com\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/suzutukiblog.com\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/suzutukiblog.com\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/suzutukiblog.com\/index.php\/wp-json\/wp\/v2\/comments?post=2566"}],"version-history":[{"count":14,"href":"https:\/\/suzutukiblog.com\/index.php\/wp-json\/wp\/v2\/posts\/2566\/revisions"}],"predecessor-version":[{"id":5066,"href":"https:\/\/suzutukiblog.com\/index.php\/wp-json\/wp\/v2\/posts\/2566\/revisions\/5066"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/suzutukiblog.com\/index.php\/wp-json\/wp\/v2\/media\/2659"}],"wp:attachment":[{"href":"https:\/\/suzutukiblog.com\/index.php\/wp-json\/wp\/v2\/media?parent=2566"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/suzutukiblog.com\/index.php\/wp-json\/wp\/v2\/categories?post=2566"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/suzutukiblog.com\/index.php\/wp-json\/wp\/v2\/tags?post=2566"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}