我正在尝试将我的应用程序升级到Rails 3.1,并且我有很多自定义Javascript文件,我正在尝试迁移到新的资产管道.
我当前(即3.1之前的)目录结构具有类似于:
public/
foo/
model.js
controller.js
etc...
Run Code Online (Sandbox Code Playgroud)
所以,我正在尝试将它们移到lib/assets/javascripts并保持foo /子目录完整(而不是制作foo_model.js,foo_controller.js等).
在我的application.js中,我试图这样做:
//= require foo/model
Run Code Online (Sandbox Code Playgroud)
和
//= require 'foo/model'
Run Code Online (Sandbox Code Playgroud)
但这些都行不通.Rails总是给我一个错误页面并说:
couldn't find file 'foo/model.js'
Run Code Online (Sandbox Code Playgroud)
如果它们不在子目录中,我确实测试了正确包含的东西,所以我知道这不仅仅是我的lib/assets目录不在include路径中.所以我想我只是想知道是否有办法做到这一点,或者我应该只是扁平化目录并使用foo_model.js等?
我已经在rails 3.1上开发了html5-rails和compass-html5但是当我在生产模式下运行我的应用程序并尝试访问我的主页时,我得到以下内容:
Sprockets::Helpers::RailsHelper::AssetPaths::AssetNotPrecompiledError in Home#index
polyfills.js isn't precompiled
Run Code Online (Sandbox Code Playgroud)
问题是localhost:8080:/assets/polyfills.js确实显示.我怀疑我的方法有问题:
重现步骤:
1使用家庭控制器创建新的rails应用程序,索引操作并设置根路由并删除public/index.html和views/layouts/application.html.erb
2在Gemfile中添加以下内容
gem 'rails', '~> 3.1.0'
gem 'unicorn'
group :assets do
gem 'compass', "~> 0.12.alpha.0"
gem 'sass-rails', "~> 3.1.0"
gem 'coffee-rails', "~> 3.1.0"
gem 'uglifier'
gem 'compass-html5', :git => 'https://github.com/sporkd/compass-html5.git'
gem 'html5-rails', :git => "https://github.com/sporkd/html5-rails.git"
end
Run Code Online (Sandbox Code Playgroud)
3运行rails g html5:install以创建/config/compass.rb文件
4创建包含以下代码的/config/initializers/sass.rb:
Rails.configuration.sass.tap do |config|
config.load_paths << "#{Gem.loaded_specs['compass'].full_gem_path}/frameworks/compass/stylesheets"
end
Run Code Online (Sandbox Code Playgroud)
5运行RAILS_ENV=production bundle exec rake …
我们有一些PDF生成代码可以在开发环境中正常工作,但是Rails在尝试在生产环境中渲染时显示错误:
***************WICKED***************
Rendered invoices/show.pdf.haml within layouts/invoices_pdf.pdf (8.8ms)
Completed 500 Internal Server Error in 73ms
ActionView::Template::Error (couldn't find file 'twitter/bootstrap'
Run Code Online (Sandbox Code Playgroud)
尝试将application.css资产包括在以下内容中失败:
!!!
%html
%head
%meta{"http-equiv"=>"content-type", :content=>"text/html; charset=utf-8"}
= wicked_pdf_stylesheet_link_tag "application"
%body
.container
= yield
Run Code Online (Sandbox Code Playgroud) 我正在为我的所有资产设置长期过期标题.但是,在我的公共目录中有一些静态HTML文件(对于Jekyll博客),这些文件正在缓存,并且在更新时没有缓存到位.它实际上似乎是我的主index.html文件,位于app/public/blog,不断被捕获在缓存中.
是否像更改配置中的"公共"一样简单?
config.static_cache_control = "public, max-age=604800"
我正在使用jquery-rails gem.在app/assets/javascripts/my_engine/application.js.erb中的rails(不可安装)引擎中:
//= require jquery
//= require jquery_ujs
//= require jquery-ui.min
Run Code Online (Sandbox Code Playgroud)
我收到错误:
Sprockets::FileNotFound: couldn't find file 'jquery-ui.min'\n (in /home/me/rails/my_engine/app/assets/javascripts/my_engine/application.js.erb
Run Code Online (Sandbox Code Playgroud)
同样的设置在容器应用程序中工作正常.如何清单可以找到jquery和jquery_ujs而不是jquery-ui.min?
我在我的容器应用程序的Gemfile中,在引擎的gemspec和引擎的Gemfile中运行了jquery-rails gem并运行了bundle install.
Google Bot Crawler一直在尝试抓取生产中我网站上不存在的CSS文件.
它要求:
http://www.mywebsite.com/assets/index-d45678283d4ab9905c3538184826e599.css
Run Code Online (Sandbox Code Playgroud)
生产中不存在这个确切的文件名(生产中的文件名略有不同).
但是,它请求的CSS文件确实存在于开发中:
http://localhost:3000/assets/index-d45678283d4ab9905c3538184826e599.css
Run Code Online (Sandbox Code Playgroud)
我不确定为什么要求这个文件.
在部署到生产之前,我使用Capistrano(加载"deploy/assets")来预编译我的资产.
现在,我只是在robots.txt中阻止此文件,但它在每次部署后请求的css文件都会更改.
为什么GoogleBot要抓取生产网站中不存在的此文件?我怎么阻止它?
我正在构建VPS,它通过Capistrano部署,数据库连接等,但页面没有可用的资源 - 它只是基本的html.
资产似乎已编译,并存在于共享目录中.
从页面html:
<link href="/assets/application-a1b5d69aeaff709fd3dce163c559b38b.css" media="all" rel="stylesheet" type="text/css" />
<script src="/assets/application-0ebd07089629f8c6880dddfb688d525d.js" type="text/javascript"></script>
Run Code Online (Sandbox Code Playgroud)
资产文件似乎存在于共享目录中:
assay@assaypipeline:~/apps/assay/shared/assets$ ls application- a1b5d69aeaff709fd3dce163c559b38b.css
application-a1b5d69aeaff709fd3dce163c559b38b.css
Run Code Online (Sandbox Code Playgroud)
当我查看,源,然后单击指向资产路径的超链接时,我从Nginx中找不到404.
解
感谢Martin M(接受了答复)的帮助.我从服务器上的〜/ apps /(app name)/ current目录中采取的步骤.
$ bundle install
$ RAILS_ENV=production bundle exec rake assets:precompile
$ sudo service nginx restart
Run Code Online (Sandbox Code Playgroud)
显然,将它包含在Capistrano配方中会更好.
*编辑 - Capfile*
load 'deploy'
load 'deploy/assets'
load 'config/deploy'
Run Code Online (Sandbox Code Playgroud) 这可能与coffeescript和Rails资产管道的JSON错误有关
我正在使用Rails 4中的应用程序.我有一个名为tasks.js.coffee的资产.直到最近一切都很好.今天早上我想做一个更改,Rails抛出"只允许生成一代JSON对象或数组".
似乎任何更改都足以抛出错误,甚至删除空行或更改字符串中的单个字符.当我还原更改时,它再次起作用.
我假设昨天当我进行捆绑更新时,一些宝石得到了更新,导致了这个问题.
有没有人看到它?有谁知道导致这个问题的原因,以及如何解决这个问题?
我打电话给几个样式表,application.css.scss其中包含require指令和@import
当前
*= require font
*= require font-awesome
*= require twitter/bootstrap
@import "bourbon";
@import "app_css_that_uses_bourbon_mixins
Run Code Online (Sandbox Code Playgroud)
为了使用bourbon gem(来自Thoughtbot),我必须使用@import语法。但是,当我开始使用@import时,我将失去在开发模式下查看单个CSS文件的功能。但是,当我使用时*= require directive,我能够在开发模式下单独查看css文件。我认为此属性(用于查看单个,非串联文件的属性)源自“ config.assets.debug = true”,这是我应用程序中的设置。
由于有多个CSS,链轮将它们链接时,我很难调试它们,因此我希望能够1.一致使用@import语法2.能够查看单个CSS文件以在开发模式下进行调试。
想
@import "bourbon";
@import "font-awesome";
@import "twitter/bootstrap";
@import "app_css_that_uses_bourbon_mixins
.....
Run Code Online (Sandbox Code Playgroud)
感谢任何帮助。
除了image_tag某些原因外,我的所有资产助手都遇到了麻烦.它们都在产生错误的路径.我使用的是Rails 4.0.0和Ruby 2.0.0.我的照片在/app/assets/images
例如
asset_url('this.png') # -> /this.png
asset_path('this.png') # -> /this.png
image_url('this.png') # -> /images/this.png
image_path('this.png') # -> /images/this.png
image-url('this.png') # -> /images/this.png
asset-url('this.png') # -> /this.png
image_tag('this.png') # -> <img ... src="/assets/this.png" /> <- only correct one
Run Code Online (Sandbox Code Playgroud)
我总是得到错误的URL ...我需要/assets/this.png它似乎只是由生成image_tag
这发生在.haml,.scss,.erb的一致好评.
我无法找到解决这个问题的方法......之前有人见过这个并得到答案吗?
asset-pipeline ×10
sprockets ×3
caching ×1
capistrano ×1
coffeescript ×1
css ×1
googlebot ×1
jquery-ui ×1
nginx ×1
ruby ×1
sass ×1
web-crawler ×1
wicked-pdf ×1