質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Ruby on Rails 5

Ruby on Rails 5は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Q&A

解決済

1回答

3133閲覧

production環境でキャッシュが効くときと効かない時があります。何故なんでしょうか・・・??

Daimian

総合スコア53

Ruby on Rails 5

Ruby on Rails 5は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

0グッド

1クリップ

投稿2018/12/13 07:05

困っていること

下記のようなコントローラーで@glassesを用意し、それをviewに渡すというごく単純な作業をしています。
railsアプリケーションでは珍しく無い実装の内容かと思います。

コントローラーの中では、Rails.cache.fetchを使用しており、これは引数で指定した場所にcacheがあればそのcacheを使用する、もしなければRails.cahce.fetch(){}の{}の中身をみる。という非常に便利なものです。

開発環境ではうまく動いていたものの、何故か本番環境になると、うまくcacheを読みにいきません。細かく申し上げれば、初めは勿論cacheが無いので、Rails.cache.fetch(){}の{}の方を読みにいくのですが、cacheがあるはずの2回目のリクエストも{}の内容を読みにいきます。取得するデータ量が多いものだとcacheがいい加減作られたであろう3回目もまだ{}の内容を読みにいってしまいます。4回目になれば流石にcacheの保管場所にある内容を使ってくれます。

補足情報のところに記載した通り、特段キャッシュに関する設定が開発環境と本番環境で異なるとは思いません。

質問したいこと

なぜこんなことが起きてしまうのでしょうか(コーディングの問題ではなく、nginxなどの他の要因でしょうか)推測でも構いません。どんなご意見でも本当に結構ですのでご指摘いただきたいです!!!

該当のソースコード

glasses_controller.rb

ruby

1 def index 2 @glasses = Rails.cache.fetch("glasses_list/#{params[:dev_contactid].to_s}", compress: true, expire_in: CRM_RESULT_CACHE_TIME){ 3 resultset = [] 4 result = GlassesList.find_by( 5 _dev_contact_dev_karte_value: params[:dev_contactid] 6 ) 7 resultset += result unless result.nil? 8 Kaminari.paginate_array(resultset) 9 }.page(params[:page]) 10 end

補足情報

config/enviroments/development.rb

ruby

1Rails.application.configure do 2 # Settings specified here will take precedence over those in config/application.rb. 3 4 # In the development environment your application's code is reloaded on 5 # every request. This slows down response time but is perfect for development 6 # since you don't have to restart the web server when you make code changes. 7 config.cache_classes = false 8 9 # Do not eager load code on boot. 10 config.eager_load = false 11 12 # Show full error reports. 13 config.consider_all_requests_local = true 14 15 # Enable/disable caching. By default caching is disabled. 16 # Run rails dev:cache to toggle caching. 17 if Rails.root.join('tmp', 'caching-dev.txt').exist? 18 config.action_controller.perform_caching = true 19 20 config.cache_store = :memory_store 21 config.public_file_server.headers = { 22 'Cache-Control' => "public, max-age=#{2.days.to_i}" 23 } 24 else 25 config.action_controller.perform_caching = false 26 27 config.cache_store = :null_store 28 end 29 30 # Store uploaded files on the local file system (see config/storage.yml for options) 31 config.active_storage.service = :local 32 33 # Don't care if the mailer can't send. 34 config.action_mailer.raise_delivery_errors = false 35 36 config.action_mailer.perform_caching = false 37 38 # Print deprecation notices to the Rails logger. 39 config.active_support.deprecation = :log 40 41 # Raise an error on page load if there are pending migrations. 42 config.active_record.migration_error = :page_load 43 44 # Highlight code that triggered database queries in logs. 45 config.active_record.verbose_query_logs = true 46 47 # Debug mode disables concatenation and preprocessing of assets. 48 # This option may cause significant delays in view rendering with a large 49 # number of complex assets. 50 config.assets.debug = true 51 52 # Suppress logger output for asset requests. 53 config.assets.quiet = true 54 55 # Raises error for missing translations 56 # config.action_view.raise_on_missing_translations = true 57 58 # Use an evented file watcher to asynchronously detect changes in source code, 59 # routes, locales, etc. This feature depends on the listen gem. 60 config.file_watcher = ActiveSupport::EventedFileUpdateChecker 61 62 #for karte system 63 #CRMへのクエリ結果をキャッシュしたいので有効化 64 #ページ自体はキャッシュしない 65 config.action_controller.perform_caching = true 66 config.cache_store = :memory_store 67 68 # for testing 69 # developのDBをクローンするが、処理を変えてstg,prdに影響を与えないようにする 70 config.active_record.schema_format = :sql 71end

config/enviroments/production.rb

ruby

1Rails.application.configure do 2 # Settings specified here will take precedence over those in config/application.rb. 3 4 # Code is not reloaded between requests. 5 config.cache_classes = true 6 7 # Eager load code on boot. This eager loads most of Rails and 8 # your application in memory, allowing both threaded web servers 9 # and those relying on copy on write to perform better. 10 # Rake tasks automatically ignore this option for performance. 11 config.eager_load = true 12 13 # Full error reports are disabled and caching is turned on. 14 config.consider_all_requests_local = false 15 config.action_controller.perform_caching = true 16 17 # Ensures that a master key has been made available in either ENV["RAILS_MASTER_KEY"] 18 # or in config/master.key. This key is used to decrypt credentials (and other encrypted files). 19 # config.require_master_key = true 20 21 # Disable serving static files from the `/public` folder by default since 22 # Apache or NGINX already handles this. 23 config.public_file_server.enabled = ENV['RAILS_SERVE_STATIC_FILES'].present? 24 25 # Compress JavaScripts and CSS. 26 config.assets.js_compressor = :uglifier 27 # config.assets.css_compressor = :sass 28 29 # Do not fallback to assets pipeline if a precompiled asset is missed. 30 config.assets.compile = false 31 32 # `config.assets.precompile` and `config.assets.version` have moved to config/initializers/assets.rb 33 34 # Enable serving of images, stylesheets, and JavaScripts from an asset server. 35 # config.action_controller.asset_host = 'http://assets.example.com' 36 37 # Specifies the header that your server uses for sending files. 38 # config.action_dispatch.x_sendfile_header = 'X-Sendfile' # for Apache 39 # config.action_dispatch.x_sendfile_header = 'X-Accel-Redirect' # for NGINX 40 41 # Store uploaded files on the local file system (see config/storage.yml for options) 42 config.active_storage.service = :local 43 44 # Mount Action Cable outside main process or domain 45 # config.action_cable.mount_path = nil 46 # config.action_cable.url = 'wss://example.com/cable' 47 # config.action_cable.allowed_request_origins = [ 'http://example.com', /http://example.*/ ] 48 49 # Force all access to the app over SSL, use Strict-Transport-Security, and use secure cookies. 50 # config.force_ssl = true 51 52 # Use the lowest log level to ensure availability of diagnostic information 53 # when problems arise. 54 config.log_level = :debug 55 56 # Prepend all log lines with the following tags. 57 config.log_tags = [ :request_id ] 58 59 # Use a different cache store in production. 60 # config.cache_store = :mem_cache_store 61 62 # Use a real queuing backend for Active Job (and separate queues per environment) 63 # config.active_job.queue_adapter = :resque 64 # config.active_job.queue_name_prefix = "prot_megane_tanaka_karte_#{Rails.env}" 65 66 config.action_mailer.perform_caching = false 67 68 # Ignore bad email addresses and do not raise email delivery errors. 69 # Set this to true and configure the email server for immediate delivery to raise delivery errors. 70 # config.action_mailer.raise_delivery_errors = false 71 72 # Enable locale fallbacks for I18n (makes lookups for any locale fall back to 73 # the I18n.default_locale when a translation cannot be found). 74 config.i18n.fallbacks = true 75 76 # Send deprecation notices to registered listeners. 77 config.active_support.deprecation = :notify 78 79 # Use default logging formatter so that PID and timestamp are not suppressed. 80 config.log_formatter = ::Logger::Formatter.new 81 82 # Use a different logger for distributed setups. 83 # require 'syslog/logger' 84 # config.logger = ActiveSupport::TaggedLogging.new(Syslog::Logger.new 'app-name') 85 86 if ENV["RAILS_LOG_TO_STDOUT"].present? 87 logger = ActiveSupport::Logger.new(STDOUT) 88 logger.formatter = config.log_formatter 89 config.logger = ActiveSupport::TaggedLogging.new(logger) 90 end 91 92 # Do not dump schema after migrations. 93 config.active_record.dump_schema_after_migration = false 94 95 #for karte system 96 #CRMへのクエリ結果をキャッシュしたいので有効化 97 #ページ自体はキャッシュしない 98 config.action_controller.perform_caching = true 99 config.cache_store = :memory_store 100 101end 102

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

:memory_storeプロセス単位でキャッシュされるため(Rails Guide)、複数のプロセスが動く環境だとプロセスごとにキャッシュされる形となってしまいます。

:file_store:mem_cache_storeなど、プロセスを超えて共有できるキャッシュを使えば、キャッシュのミスヒットは全体で1回となります。

投稿2018/12/13 07:20

maisumakun

総合スコア145123

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Daimian

2018/12/14 01:32

いつも迅速な回答ありがとうございます!よくわかりました!ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問