0

我在我的 Raspberry Pi 2 上配置了一个 rails 应用程序。它在我的本地 LAN 上,一遍又一遍地从路由器获取相同的 ip。它配置了 mDNS,因此我可以在 mypi.local 上访问它。

为该本地域配置了 apache2 和乘客。现在,当我在浏览器中输入 mypi.local 时,我会看到该应用程序。伟大的!

它可以工作,但由于某种未知原因,我得到了所有应用程序的 html,但没有任何 CSS 和 Javascript。我可以与不依赖 Javascript 的网站部分进行交互,并且我的浏览器的默认 CSS 会启动。

有任何想法吗?

如果我启动 WEBrick 并尝试 mypi.local:3000 一切都按预期工作。

4

1 回答 1

1

这是因为与生产相比,开发中的工作方式不同。有几点需要注意:-

  1. 除非它们包含在其他文件中config.precompile在指令application.css中列出,否则您的应用程序将无法通过资产管道使用任何 CSS 或 JS 文件。仅application.js在所有 CSS 和 JS 文件中默认可用。
  2. 当您编译资产时, Rails会将 app/assets 文件夹中的每个不是 Javascript 文件或 CSS 文件的文件复制到该文件夹​​中。因此,如果您想添加一些网络字体,您可以制作一个 app/assets /fonts/ 文件夹并把你的字体放在那里,当你编译你的资产时public/assets,这些将被复制到文件夹中。public/assets/fonts请注意,app/assets/stylesheets/fonts.css.scss引用这些字体的文件不会被复制,除非您将其添加到config.assets.precompile指令中或从您的application.css
  3. for config.assets.compile...如果它设置为“true”(默认情况下在开发中),那么Rails将尝试通过首先查看public/assets目录来查找 Javascript 或 CSS 文件,如果找不到,将搜索您的app/assets文件夹正在寻找该文件。如果它在其中找到它,app/assets它将继续并即时编译,然后提供此资产。

这样做的问题是您没有注意到它在开发中发生,然后您提交所有内容并推送到生产和 BOOM,所有内容都因 500 错误而被破坏,因为生产config.assets.compile设置为“false” 。这可以防止应用程序“回退” " 并尝试直接加载文件而不是使用资产管道。

# Don't fallback to assets pipeline if a precompiled asset is missed
config.assets.compile = false

为什么不在每个环境中都将其设置为“true”?好吧,因为它很慢。而且您不希望生产缓慢

  1. RAILS_ENV=production rake assets:clean assets:precompile
  2. 检查 public/assets 目录并验证资产是否已编译..如果它不为空...这意味着资产管道正在工作但路径不正确。使用 assets_helpers设置 css 文件中资产的路径。
于 2015-03-25T10:09:42.590 回答