【问题标题】:Why is Rails caching assets in development mode on my iPhone?为什么 Rails 在我的 iPhone 上以开发模式缓存资产?
【发布时间】:2012-12-20 05:43:19
【问题描述】:

根据Ruby on Rails Guide: Caching,在开发和测试环境中默认禁用缓存。如果我做一个小的 CSS 更改,运行 rails server 并通过 localhost:3000 访问我的站点,我可以看到我的更改。但是,如果我在我的 iPhone 上以10.0.1.2:3000 访问我的 Rails 服务器,CSS 不会更新,即使 Chrome 处于隐身模式。当我尝试使用缓存为空的其他 iPhone 时,变化就在那里。

我找到了描述相同问题的stack overflow post。以下是建议的解决方案:

  • 删除public/assets 目录。我没有。
  • config.serve_static_assets = false 添加到environments/development.rb。它已经在那里了。
  • 删除/tmp/cache/assets,将config.serve_static_assets = false添加到environments/development.rb并重启服务器。我试过了,但没有用。

这是我的相关@​​987654332@ 配置:

# In the development environment your application's code is reloaded on
# every request. This slows down response time but is perfect for development
# since you don't have to restart the web server when you make code changes.
config.cache_classes = false

# Show full error reports and disable caching
config.consider_all_requests_local       = true
config.action_controller.perform_caching = false

【问题讨论】:

  • 您将资产存储在应用程序中的什么位置?
  • 我将它们存储在app/assets

标签: iphone ruby-on-rails


【解决方案1】:

我遇到了类似的问题。这是因为我的config/environments/development.rb 包含config.asset_host = 'http://localhost:3000'

我已将其删除,一切正常。

【讨论】:

    【解决方案2】:

    我很确定这种情况正在发生,因为 Rails 只在生产中进行指纹识别:http://guides.rubyonrails.org/asset_pipeline.html#in-production

    这意味着在开发中更具缓存攻击性的浏览器可能会遇到此问题。

    尝试将此添加到您的 development.rb:

    config.assets.digest = true
    

    或者更可取的条件是您进行移动开发时的条件

    # One of the few exceptions I'd make to a no ENV variables rule 
    # for my rails environment config files
    config.assets.digest = true if ENV["MOBILE_DEBUG"]
    

    【讨论】:

    • 太棒了!感谢您的帮助。
    【解决方案3】:

    我没有要测试的 iPhone,但这听起来像是正常的浏览器缓存问题。针对clearing the browser cache 尝试这些说明。如果可行,则每次更新 CSS(或 J

    【讨论】:

    • 我认为 Rails 的功能之一是它应该通过在开发模式下将哈希字符串附加到资产文件名来防止浏览器缓存。
    • 应该是的,是的。您可以检查网页的来源,以确保资产 URL 正在更新。您的 iPhone 可能正在缓存 HTML 页面,因此它甚至看不到更新后的 URL。也许是某种移动优化。
    • 清除浏览器缓存可行,但确实很烦人。我仍然觉得应该通过某种方式使用 Rails 来实现这一点(例如在每个请求上将 UUID 附加到资产文件名)。
    【解决方案4】:

    如何通过 iphone 访问本地计算机?

    您是否配置了任何网络设置,或者您将其推送到不同的服务器并从那里访问,因为如果您将其推送到不同的服务器,则该服务器可能在生产模式下运行。

    HTH

    【讨论】:

    • 我只是在访问我的开发机器的 IP 地址而不是本地主机(http://10.0.1.2:3000 而不是 http://localhost:3000)。
    • 在这种情况下,我怀疑 iphone 浏览器缓存与此有关,对不起,我不熟悉该区域,可能您可以发布与 iphone 类别和相同的问题了解它的浏览器缓存是如何工作的.. :)
    • 我添加了 iPhone 类别。
    猜你喜欢
    • 2016-10-10
    • 2014-05-23
    • 2011-12-30
    • 1970-01-01
    • 1970-01-01
    • 2012-12-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多