在尝试创建资产时:为生产网站预编译我第一次遇到此错误.
rake assets:precompile undefined method directory? for nil:NilClass
Run Code Online (Sandbox Code Playgroud)
我已经成功更新了网站并完成了一项资产:之前多次预编译.
完整的例子:
# RAILS_ENV=production rake assets:precompile --trace
/usr/local/rvm/gems/ruby-1.9.2-p290@pm/gems/rack-1.3.4/lib/rack/backports/uri/common_192.rb:53: warning: already initialized constant WFKV_
** Invoke assets:precompile (first_time)
** Execute assets:precompile
/usr/local/rvm/gems/ruby-1.9.2-p290@pm/gems/rack-1.3.4/lib/rack/backports/uri/common_192.rb:53: warning: already initialized constant WFKV_
rake aborted!
undefined method `directory?' for nil:NilClass
Tasks: TOP => assets:precompile
(See full trace by running task with --trace)
Run Code Online (Sandbox Code Playgroud)
我期待着有人对这一点有所了解,我一直在绞尽脑汁,谷歌搜索答案数小时.
关于资产管道和javascript模板的大多数rails 3.1教程让我相信资产管道会获取任何*.jst文件并将它们打成一个可用于*.js文件的JST变量.但是,当我尝试加载*.jst模板时,我当前难以处理以下错误:
Uncaught ReferenceError: JST is not defined
有什么指针吗?
我将Heroku环境设置为暂存,但我的资产始终在生产环境中编译.
这是heroku config:
GEM_PATH => vendor/bundle/ruby/1.9.1 LANG => en_US.UTF-8 PATH => bin:vendor/bundle/ruby/1.9.1/bin:/usr/local/bin:/usr/bin:/bin RACK_ENV => staging
我在production.rb文件中添加了一个例外,因此我知道在编译资产时它正在运行哪个环境.服务器启动只是正常运行heroku run console显示我正在运行升级.
它只是在运行时assets:precompile始终处于生产阶段.
如果需要,我很乐意发布任何其他配置文件.
我可以补充一点,我在Heroku上运行Rails 3.2.2和Cedar堆栈
输出来自heroku run rake about:
About your application's environment Ruby version 1.9.2 (x86_64-linux) RubyGems version 1.3.7 Rack version 1.4 Rails version 3.2.2 JavaScript Runtime therubyracer (V8) Action Pack version 3.2.2 Active Support version 3.2.2 Middleware Rack::Cache, ActionDispatch::Static, Rack::Lock, #, Rack::Runtime, Rack::Auth::Basic, Rack::MethodOverride, ActionDispatch::RequestId, Rails::Rack::Logger, ActionDispatch::ShowExceptions, ActionDispatch::DebugExceptions, ActionDispatch::RemoteIp, ActionDispatch::Callbacks, ActionDispatch::Cookies, …
更新:
事实证明,有时results.image是零或"",所以这打破了应用程序,因为资产管道正在寻找像""这样的图像而没有找到它.现在我没有显示图像,如果没有图像,但我将不得不为缺失的图像添加默认图像......这应该是一个更永久的修复.
关于heroku cedar和Rails资产管道这个问题,我有很多问题,我尝试了很多解决方案,但是没有一个能够解决,而且可能是因为我遇到的问题有一个皱纹我没见过其他地方.
我的应用程序使用Rails 3.2.6,我已经将它部署在Heroku的雪松堆栈上.这是一个基本的搜索应用程序,通过websolr搜索附加的postgres数据库,所以当你加载索引(索引#index)而没有params [:q] .present?你有一个搜索框,这很好用.但是当我在搜索框中输入内容并点击提交,并且索引#index再次加载但这次尝试显示结果时,我得到:
app[web.1]: Completed 500 Internal Server Error in 440ms
app[web.1]:
app[web.1]: ActionView::Template::Error ( isn't precompiled):
app[web.1]: 12: - @results.each do |result|
app[web.1]: 13: %li
app[web.1]: 14: %div
app[web.1]: 15: = image_tag result.image
app[web.1]: 16: %div
app[web.1]: 17: = result.title
app[web.1]: 18: %div
app[web.1]: app/views/index/index.html.haml:15:in `block in _app_views_index_index_html_haml___4350601325072829986_32734540'
app[web.1]: app/views/index/index.html.haml:12:in _app_views_index_index_html_haml___4350601325072829986_32734540'
Run Code Online (Sandbox Code Playgroud)
关于我的具体案例和我见过的其他人有什么奇怪的是以下几行:
ActionView::Template::Error ( isn't precompiled):
Run Code Online (Sandbox Code Playgroud)
对于我所见过的所有其他问题,括号中有一个css文件,即("foo.css"未预编译),或者在我看来它应该是("index.css")没有预编译).但这里只是空白!
这是我试图开始工作的暂存部署,所以我尝试运行RAILS_ENV =暂存rake资产:precompile(然后提交结果),但这并没有解决它.我甚至尝试在视图中删除(注意那里没有任何实际的样式).什么都行不通,我很茫然.任何帮助将不胜感激.
作为参考,这是我的gemfile:
source 'https://rubygems.org'
gem 'rails', '3.2.6'
gem 'pg'
gem 'haml-rails'
gem 'mongoid'
gem 'sunspot_rails', '~> …Run Code Online (Sandbox Code Playgroud) 我已经将Rails应用程序推送到Heroku并继续遇到以下问题:
我将更改保存到我的主css.scss文件(在资产/样式表中)或资产/图像中的图像,推送到git,将其推送到heroku,然后重新加载页面,只是发现这些资产没有已装满了.
这也是本地服务器上的一个小问题,但输入:
rake assets:precompile
Run Code Online (Sandbox Code Playgroud)
并重新加载本地服务器通常工作,而做
heroku run rake assets:precompile
Run Code Online (Sandbox Code Playgroud)
然后重新推动什么也没做.我已经四处寻找信息并且没有找到任何特别有帮助的东西.
值得注意的是,在我的config/application.rb中(其中一些是钓鱼的结果):
# Enable the asset pipeline
config.assets.enabled = true
if defined?(Bundler)
# If you precompile assets before deploying to production, use this line
Bundler.require(*Rails.groups(:assets => %w(development test)))
# If you want your assets lazily compiled in production, use this line
# Bundler.require(:default, :assets, Rails.env)
end
Run Code Online (Sandbox Code Playgroud)
在config/environments/production.rb中:
# Disable Rails's static asset server (Apache or nginx will already do this)
config.serve_static_assets = false
# Compress JavaScripts …Run Code Online (Sandbox Code Playgroud) 在Rails 3中有一个rake资产:预编译:nodigest任务,它编译资产并在/ public/assets目录中编写没有摘要部分的资源.在Rails 4中,这已被删除,默认情况下,所有资产都只使用摘要进行预编译.由于各种原因,我还需要一些资产的非消化版本.有没有简单的方法来启用旧的行为?
我正在开发一个不会在生产中缩小CSS或JS的项目.
不幸的是,我从来没有遇到过这个问题,而且我对资产管道如何详细调试问题并不熟悉.
我的问题是,我需要检查哪些要点/设置以确保启用?
它正确地将不同的文件组合成一个JS和CSS文件......它只是没有缩小.
到目前为止,我已经添加config.assets.js_compressor = :uglifier到production.rb,并uglifier到Gemfile,但仍然没有骰子.
我正在使用从Rails 3.2.12升级的Rails2
假设我有一个文件"example.txt",它位于我的Rails应用程序中的assets/files文件夹中.在制作时,我可以通过网址'/assets/example.txt'访问此文件
如何设置我的routes.rb文件,以便在访问'example.txt'时可以访问example.txt的内容?
我目前正在使用Grails 资源插件,我有许多像这样定义的模块:
bootstrap {
resource url:'js/libs/bootstrap/bootstrap.min.js'
resource url:'css/libs/bootstrap/bootstrap-responsive.css'
resource url:'css/libs/bootstrap/bootstrap-glyphicons.css'
resource url:'css/libs/bootstrap/bootstrap.min.css'
}
Run Code Online (Sandbox Code Playgroud)
这非常方便,因为它将Javascript和CSS文件组合在一起形成一个概念性的Bootstrap模块.
我现在正在研究资产管道插件,看来文件只能require是同一类型的其他文件,这意味着我现在有两棵依赖树(CSS&JS)而不是一棵,这是一个问题,因为存在相互依赖性,例如,bootstrap.js取决于bootstrap.css.
asset-pipeline插件是否允许声明类型间依赖关系?如果没有,处理这个问题的最佳方法是什么?
Webpacker可以轻松使用JavaScript预处理器和捆绑器Webpack 2.x.x +来管理Rails中类似应用程序的JavaScript.它与资产管道共存,因为Webpack的主要目的是类似app的JavaScript,而不是图像,CSS,甚至是JavaScript Sprinkles(所有这些都继续存在于app/assets中).
但是,也可以将Webpacker用于CSS,图像和字体资源,在这种情况下,您甚至可能不需要资产管道.当专门使用基于组件的JavaScript框架时,这几乎是相关的.
为什么与基于组件的框架使用Webpacker进行资产更相关?如果我使用React,从资产管道对Webpack获取资产有什么不同?