Ruby Rails 资产管道无法正常工作

Ruby on Rails asset pipeline doesn't work properly

我刚才一直在 ruby 项目上工作 rails。我创建了一个名为 'animals' 的控制器和一个用于索引操作的视图 (index.html.erb)。我不想包含 'application' javascript 文件。

所以我创建了animals.js

文件内容为

//= require jquery
//= require jquery_ujs
//= require turbolinks
//= require bootstrap-sprockets
//= animals.coffee

我还添加了 animals.js 和 animals.css 到 asset.rb

Rails.application.config.assets.precompile += %w( animals.js )
Rails.application.config.assets.precompile += %w( animals.css )

我的 index.html.erb 包含以下几行

<%= stylesheet_link_tag 'animals', media: 'all', 'data-turbolinks-track' => true %>
<%= javascript_include_tag 'animals', 'data-turbolinks-track' => true %>

当我检查服务器生成的 html 源代码时,我发现页面中没有包含 jquery scipts。这只是 animal.js 个文件。

<head>
   <meta name="viewport" content="width=device-width, initial-  scale=1.0">
   <title>Rails Omniauth</title>
   <meta name="description" content="Rails Omniauth">
   <link rel="stylesheet" media="all" href="/assets/animals.self-e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b5433a495991b7852b855.css?body=1" data-turbolinks-track="true">
   <script src="/assets/animals.self-1d93d37bf2f830ac42e82eb68e3bb0040ece5d23533a05bf77f7407fd59178d3.js?body=1" data-turbolinks-track="true"></script>

</head>

关于为什么包含这些脚本的任何建议?

谢谢。

我认为您的问题可能是您有两个同名文件(但扩展名不同)。由于 Rails asset helpers 平等对待 coffescript 和 js 文件,这是不明确的:

<%= javascript_include_tag 'animals', 'data-turbolinks-track' => true %>

它应该加载哪个文件?我猜它按字母顺序排在第一个,即 animals.coffee.

要解决此问题,请将链轮清单移至 animals.coffee 并删除 animals.js 文件。

# app/assets/animals.coffee
#= require jquery
#= require jquery_ujs
#= require turbolinks
#= require bootstrap-sprockets
#= require_self
alert 'Hello World'

您可以删除 animals.coffee 文件,并且可以在 application.js 的文件中要求 animals.js 以便在您的项目中使用您的 js 代码。