【问题标题】:application.js isn't precompiledapplication.js 没有预编译
【发布时间】:2011-12-12 04:41:15
【问题描述】:

我不知道为什么,但是每当我运行 rake assets:precompile 时,application.js 都不会被编译。我在生产模式下收到“application.js 未预编译”错误。

这是我的 Gemfile,如果它意味着什么:

source 'http://rubygems.org'

gem 'rails', '3.1.1'
gem 'eventmachine', '1.0.0.beta.4.1'
gem 'thin'
gem 'mysql'
gem 'win32-open3-19'
gem 'paperclip', '2.3.8'
#gem 'jammit'
gem 'jsmin'
gem 'will_paginate'

# Bundle edge Rails instead:
# gem 'rails',     :git => 'git://github.com/rails/rails.git'


# Gems used only for assets and not required
# in production environments by default.
group :assets do
  gem 'sass-rails',   '~> 3.1.4'
  gem 'coffee-rails', '~> 3.1.1'
  gem 'uglifier', '>= 1.0.3'
end

gem 'jquery-rails'

# To use ActiveModel has_secure_password
# gem 'bcrypt-ruby', '~> 3.0.0'

# Use unicorn as the web server
# gem 'unicorn'

# Deploy with Capistrano
# gem 'capistrano'

# To use debugger
# gem 'ruby-debug19', :require => 'ruby-debug'

group :test do
  # Pretty printed test output
  gem 'turn', :require => false
end

我制作了一个新的 rails 应用程序并测试了 rake assets:precompile 并且它正在工作。这两个应用程序在相关文件方面的唯一区别是我安装了哪些 gem。两个应用程序之间的“application.js”是相同的...... environment.rb 文件也是如此。

另外值得注意的是...当我在 assets/javascripts 目录中包含一个随机 .js 文件并使用“javascript_include_tag :application”时,开发模式下生成的 URL 之一如下所示:/assets/../javascripts/anytimec.js?body=1,它们显然失败了使用 404。但是 application.js 文件被正确引用。

更新:

查看 Sprockets 生成的内容,我注意到“逻辑路径”在该位置使用“../javascripts”。我通过分别查看asset_paths.asset_for('application','js') 和asset_paths.asset_for('anytimec','js') 的转储来测试这一点。我还将这些转储与新应用程序中的相同文件进行了比较。新应用程序不会将“../javascripts”添加到该位置,而我当前的应用程序会。它不会对 CSS 文件或其他任何东西执行此操作……只是 javascript。这绝对是在暗示核心问题,但我不知道从哪里开始。

【问题讨论】:

  • app/assets/javascripts/application.js[.coffee] 是否存在?
  • 是的。 application.js 存在于 javascripts 资产目录中。在开发中一切正常,只是在生产中没有。
  • 您是否更改了默认的预编译配置选项?
  • 我不这么认为...这些是我认为相关的一些配置设置:config.serve_static_assets = false,config.assets.compile = false。但据我所知,其他一切都可以预编译。
  • 你能检查一下你的 public/assets 文件夹,看看是否有 application.css 或任何其他文件吗?

标签: ruby-on-rails ruby-on-rails-3 asset-pipeline precompiled


【解决方案1】:

在发现它与读取资产文件夹中专门称为“java”的文件夹时 Sprockets 失败有关后,我将其重命名为“applet”并开始工作。

请参阅this post 以获得答案。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-06-07
    • 1970-01-01
    • 2014-09-30
    • 2013-09-15
    • 2012-05-31
    • 2021-10-24
    • 1970-01-01
    相关资源
    最近更新 更多