【问题标题】:rake assets:precompile heroku doesn't pick uprake 资产:预编译 heroku 不接受
【发布时间】:2023-04-09 00:44:01
【问题描述】:

啊,我对这些资产感到头疼:预编译的东西。当我第一次将应用程序推送到 heroku 时,我在本地预编译了它们。这一切都很好,但是它不会接受我在开发之后对 css 文件所做的任何更改,因为它为预编译的资产提供服务。所以现在,对于视觉上的东西,我必须做 rake assets:clean。我做了我想在本地应用的更改,没有问题。然后,我再次预编译资产,并将更改推送到heroku,但现在似乎它甚至看不到我的资产。页面只是白色的,上面有东西,没有任何样式。

请帮忙!

【问题讨论】:

    标签: ruby-on-rails heroku assets precompile


    【解决方案1】:

    您在使用 Heroku 系统的 2 个部分时遇到问题:


    Asset Fingerprinting

    资产指纹识别基本上是在资产文件的末尾添加一个 MD5 哈希,以保持它们的唯一性并依赖于它们在文件中的任何关系。这很重要,因为每次编译资源时,它们都会生成这些新文件名,这会导致标准 CSS 混乱

    您需要对 CSS 中的所有资产引用执行此操作:

    将您的 CSS 文件更改为 .css.scss

    与静态 CSS 不同,SCSS 是动态编译的,可以解析 ruby​​ 代码。这意味着您可以像这样引用您的资产:

    background-url: asset_url('/nav_bar/nagivgation_bg.png');
    

    为您的 CSS 文件执行此操作,引用应该没问题


    Serve Static Assets

    Heroku 需要您在 Rails 中运行静态资源。这很简单:

    #/config/environments/production.rb
    config.serve_static_assets = true
    

    更新

    以下是一些实时代码,用于演示在 .scss 文件中的何处包含动态帮助器:

    .confirmation .action_bar a.confirm {
            color: #fff;
            background: asset_url('modals/confirm_button/bg.png') top repeat-x;
            position: relative;
            margin: 0 0 0 7px;
    }
    

    【讨论】:

    • 对不起,因为我对 heroku 的整个资产有点陌生。我的 css 文件已经是 .css.scss。我应该把这段代码放在哪里: background-url:asset_path('/nav_bar/nagivgation_bg.png');
    • 没问题 - 我只是提出了一个普通的答案,因为我不知道你有多少经验 :)asset_path 的东西是你如何在 .scss 中使用动态路径的一个例子 ->它实际上应该是“asset_url”,并且基本上替换了您拥有的任何 url()(因为它们只会引用静态文件)。我用一个活生生的例子更新了我的答案
    • 我认为我的 scss 文件中没有任何 url。
    猜你喜欢
    • 2014-02-19
    • 1970-01-01
    • 2012-04-04
    • 1970-01-01
    • 2014-04-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多