【问题标题】:Rails 4: assets on HerokuRails 4:Heroku 上的资产
【发布时间】:2015-06-30 12:32:05
【问题描述】:

我已将我的应用程序部署到 heroku,但某些资产未加载,例如:

问题出在预编译中,我必须手动将每个文件添加到 assets.rb 但我真的不想做,因为有很多

在我的 assets.rb 中我尝试过:

Rails.application.config.assets.precompile << Proc.new { |path|
  if path =~ /\.(css|js)\z/
    full_path = Rails.application.assets.resolve(path).to_path
    app_assets_path = Rails.root.join('app', 'assets').to_path
    if full_path.starts_with? app_assets_path
      puts "including asset: " + full_path
      true
    else
      puts "excluding asset: " + full_path
      false
    end
  else
    false
  end
}

和:

Rails.application.config.assets.precompile = false

但它不起作用

我已经添加到 application.rb

config.serve_static_files = true

另外,//=我的预编译资产中的要求不包含在标题中

在我的笔记本电脑上的开发环境中一切正常

我需要进行哪些更改才能使其在生产中运行?

更新

我使用 helper,在视图中包含一些 js 和 css 文件:

def javascript(*files)
  content_for(:foot) { javascript_include_tag(*files) }
end

在我看来,我有:

<% stylesheet 's3_direct_upload_progress_bars' %>
<% javascript 's3_direct_upload', 'init.script.js' %>

gem s3_direct_upload 的资产未加载 init.script.js 位于 assets/javascripts 中,因此它正在加载

另一个问题,在我的 application.js 我有:

//= require jquery
//= require jquery.slicknav.min.js

$(function ()
{
    $('#menu').slicknav();
});

assets:precompile 之后看起来没问题,但在控制台中我有错误:

$(...).slicknav is not a function

所以编译错了?在开发环境中一切正常

更新 2

忽略第二个问题,我找到了jquery的第二个require,它导致了这个错误

但我仍然无法在没有预编译的情况下包含来自 gem 的资产, 我可以以某种方式禁用此行为吗?我只想包含一些用于特定操作的资产而不会让人头疼

【问题讨论】:

  • 在部署到 Heroku 之前,您是否在控制台中运行了 rake assets:precompile
  • 我也试过了,但是我包含了一些带有javascript_include_tag的文件,所以它们没有包含在预编译中

标签: ruby-on-rails heroku


【解决方案1】:

默认情况下,Rails 4 不会为您的资源提供服务。要启用此功能,您需要进入 config/application.rb 并添加以下行:

config.serve_static_assets = true

或者,您可以通过在 Gemfile 中包含 rails_12factor gem 来获得相同的结果:

gem 'rails_12factor', group: :production

此 gem 将配置您的应用程序以提供静态资产,因此您无需在配置文件中手动执行此操作。

希望这对你有用。

【讨论】:

猜你喜欢
  • 2018-12-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-31
相关资源
最近更新 更多