Rails 应用程序资产在 WEBrick 中查看得很好,但没有 CSS、Javascript 或来自 apache2 的图像?
Rails app assets view just fine in WEBrick but no CSS, Javascript or Images from apache2?
我在 Raspberry Pi 2 上配置了一个 rails 应用程序。它在我的本地 LAN 上,一遍又一遍地从路由器获取相同的 IP。它配置了 mDNS,所以我可以在 mypi.local.
访问它
为该本地域配置了 apache2 和 passenger。现在,当我在浏览器中输入 mypi.local 时,我会看到该应用程序。太棒了!
它有效,但由于某些未知原因,我得到了应用程序的所有 html,但没有任何 CSS 和 Javascript。我可以与不 Javascript 依赖的网站部分进行交互,并且我的浏览器的默认 CSS 开始运行。
有什么想法吗?
如果我启动 WEBrick 并尝试 mypi.local:3000,一切都会按预期进行。
这是因为与生产相比,开发中的工作方式不同。
需要注意的几点:-
- 没有 CSS 或 JS 文件将通过资产管道提供给您的应用程序,除非它们包含在 或 中列出的其他文件中
config.precompile
directive.Only application.css
和 application.js
默认情况下所有 CSS 和 JS 文件都可用。
- app/assets 文件夹中的 Javascript 文件或 CSS 文件之外的每个文件都将被 Rails[= 复制46=] 到
public/assets
文件夹,当你编译你的 assets.So 如果你想添加一些网络字体,你可以创建一个 app/assets/fonts/ 文件夹并将你的字体放在那里,这些当您编译资产时,它将被复制到 public/assets/fonts
文件夹。请注意,引用这些字体的 app/assets/stylesheets/fonts.css.scss
文件将 不会 被复制,除非您将其添加到 config.assets.precompile
指令或从 application.css
中要求它]
- for
config.assets.compile
...如果设置为"true"(在开发中默认设置)那么Rails将尝试首先在 public/assets
目录中查找 Javascript 或 CSS 文件,如果找不到,将在 app/assets
文件夹中寻找文件.如果它在 app/assets
中找到它,它将继续并即时编译,然后提供该资产。
这个问题是你没有注意到它在开发中发生,然后你提交所有内容并推送到生产和 BOOM,一切都被破坏了 500 个错误,因为 生产 config.assets.compile
设置为 "false"。这可以防止应用程序 "falling back" 尝试直接加载文件而不是使用资产管道。
# Don't fallback to assets pipeline if a precompiled asset is missed
config.assets.compile = false
为什么不在每个环境中都将此设置为 "true"?好吧,因为它很慢。而且您不希望生产缓慢
- 运行
RAILS_ENV=production rake assets:clean assets:precompile
- 检查 public/assets 目录并验证资产是否已编译..如果它不为空...这意味着资产管道正在运行但路径不是 correct.use asset_helpers 以设置css 个文件中的资产路径。
我在 Raspberry Pi 2 上配置了一个 rails 应用程序。它在我的本地 LAN 上,一遍又一遍地从路由器获取相同的 IP。它配置了 mDNS,所以我可以在 mypi.local.
访问它为该本地域配置了 apache2 和 passenger。现在,当我在浏览器中输入 mypi.local 时,我会看到该应用程序。太棒了!
它有效,但由于某些未知原因,我得到了应用程序的所有 html,但没有任何 CSS 和 Javascript。我可以与不 Javascript 依赖的网站部分进行交互,并且我的浏览器的默认 CSS 开始运行。
有什么想法吗?
如果我启动 WEBrick 并尝试 mypi.local:3000,一切都会按预期进行。
这是因为与生产相比,开发中的工作方式不同。 需要注意的几点:-
- 没有 CSS 或 JS 文件将通过资产管道提供给您的应用程序,除非它们包含在 或 中列出的其他文件中
config.precompile
directive.Onlyapplication.css
和application.js
默认情况下所有 CSS 和 JS 文件都可用。 - app/assets 文件夹中的 Javascript 文件或 CSS 文件之外的每个文件都将被 Rails[= 复制46=] 到
public/assets
文件夹,当你编译你的 assets.So 如果你想添加一些网络字体,你可以创建一个 app/assets/fonts/ 文件夹并将你的字体放在那里,这些当您编译资产时,它将被复制到public/assets/fonts
文件夹。请注意,引用这些字体的app/assets/stylesheets/fonts.css.scss
文件将 不会 被复制,除非您将其添加到config.assets.precompile
指令或从application.css
中要求它] - for
config.assets.compile
...如果设置为"true"(在开发中默认设置)那么Rails将尝试首先在public/assets
目录中查找 Javascript 或 CSS 文件,如果找不到,将在app/assets
文件夹中寻找文件.如果它在app/assets
中找到它,它将继续并即时编译,然后提供该资产。
这个问题是你没有注意到它在开发中发生,然后你提交所有内容并推送到生产和 BOOM,一切都被破坏了 500 个错误,因为 生产 config.assets.compile
设置为 "false"。这可以防止应用程序 "falling back" 尝试直接加载文件而不是使用资产管道。
# Don't fallback to assets pipeline if a precompiled asset is missed
config.assets.compile = false
为什么不在每个环境中都将此设置为 "true"?好吧,因为它很慢。而且您不希望生产缓慢
- 运行
RAILS_ENV=production rake assets:clean assets:precompile
- 检查 public/assets 目录并验证资产是否已编译..如果它不为空...这意味着资产管道正在运行但路径不是 correct.use asset_helpers 以设置css 个文件中的资产路径。