字形在 Ubuntu Rails 4.1 安装中未正确显示

Posted

技术标签:

【中文标题】字形在 Ubuntu Rails 4.1 安装中未正确显示【英文标题】:Gliphs not showing up properly on an Ubuntu Rails 4.1 installation 【发布时间】:2014-07-02 23:19:47 【问题描述】:

在我的开发机器上:

Windows 8.1
Ruby 2.0
Rails 4.1
Bootstrap 3

在我的生产机器上:

Ubuntu 12.4
Ruby 2.1.1
Rails 4.1
Bootstrap 3

这是我的代码:

<td>
  <%= link_to my_model, class: 'btn btn-info' do %>
    <span class="glyphicon glyphicon-search"></span>
  <% end %>
</td>
<td>
  <%= link_to [:edit, my_model], class: 'btn btn-warning' do %>
    <span class="glyphicon glyphicon-pencil"></span>
  <% end %>
</td>
<td>
  <%= link_to my_model, method: :delete, data:  confirm: 'Are you sure?' , class: 'btn btn-danger' do %>
    <span class="glyphicon glyphicon-remove"></span>
  <% end %>
</td>

这些图形在我的开发机器上显示良好,但在生产机器上却没有。附上图片。有什么想法吗?

预编译:

我忘了补充一下,我预编译如下:

RAILS_ENV=production bundle exec rake assets:precompile

检查元素:

当我检查这些元素时,萤火虫是这样说的。它们是一样的:

用于生产的 Firebug 检查:

<td>
  <a class="btn btn-info" href="/agents/1">
    <span class="glyphicon glyphicon-search"></span>
  </a>
</td>

用于开发的 Firebug 检查:

<td>
  <a class="btn btn-info" href="/agents/1">
    <span class="glyphicon glyphicon-search"></span>
  </a>
</td>   

答案:

看起来我正在处理一个已知的 Rails 4.1 问题。解决办法是:

    在environments/production.rb中有以下设置:

    config.assets.compile = true

    预编译资产如下:

    RAILS_ENV=production bundle exec rake assets:precompile

预编译资产将防止动态资产重新编译。我对其进行了测试,它现在可以在我的 ubuntu 4.1 服务器上运行

【问题讨论】:

开发者控制台中的任何错误? 开发者控制台?问题出在生产服务器上,而不是开发环境上。 是的开发者控制台!您在浏览器上检查元素的那个,它与您的终端不同:) 您是在谈论 Rails 控制台,如 rails c RAILS_ENV=production,还是使用我的本地浏览器检查元素? 您的浏览器控制台,您可以在其中检查 js 错误、萤火虫或只是您使用过的本地浏览器控制台 【参考方案1】:

可能有很多问题导致:

--

预编译

这里的主要问题可能是precompilation:

默认情况下,Rails 假定资产已经预编译,并将 由您的网络服务器用作静态资产。

预编译 Rails 资产是许多 Heroku 绑定应用程序的祸根(我知道您没有使用 Herou),因为许多人在设计资产管道时没有考虑预编译要求。

您可能遇到的问题是您的资产要么没有预编译,要么引用了它们的“动态”文件名,而不是它们的“静态”文件名

我会在部署到生产之前亲自预编译您的资产:

$ rake assets:precompile RAILS_ENV=production

-

指纹识别

当你预编译你的资产时,Rails 会执行一个名为 fingerprinting 的操作 - 基本上 Rails 会在文件名的末尾附加一个哈希

对许多人来说,另一个问题是他们会使用类似以下的方式引用“静态”文件名:

#app/assets/stylesheets/application.css
.style 
   background: url("your_image.png");

这里的问题是,虽然这将在开发中工作(静态引用资产),但在生产中会遇到问题。要解决此问题,您需要使用一些 Rails CSS pre-processors (SASS):

#app/assets/stylesheets/application.css
.style 
   background: asset_url("your_image.png");

--

修复

直接提到您的问题,我想说的主要问题是您可能没有正确引用您的 CSS 文件,可能路径不正确。

我会首先在您的浏览器中查看developer console - 这可能会告诉您您没有可用的各种 CSS 文件,然后您可以尝试预编译和动态引用字形以看看有没有效果

【讨论】:

我预编译了资产(请参阅我的编辑),所以这不是问题。我会调查指纹并报告 在我的问题的编辑中查看完整答案。需要预编译并阅读您指向我的链接帮助我找到答案(尽管特定于 Rails 4.1 以解决已知问题)

以上是关于字形在 Ubuntu Rails 4.1 安装中未正确显示的主要内容,如果未能解决你的问题,请参考以下文章

rails中未定义的方法`devise_for'

Rails RSpec中未定义的方法“create”

带有引导程序 3.3.4 的字形图标在 rails 4.2.1 中不起作用

在ubuntu上安装rails

Rails 5,Rspec:架构中未找到环境数据

用作 JSON 时,rails 3 转义的 html 标签在浏览器中未转义