我正在尝试使用dojo-toolkit作为rails 3.1 app上的JS框架,但我正在努力将dojo require结构与sprockets require和coffeescript合并.似乎dojo期望磁盘上的JS文件,但我猜它们是从coffeescript动态创建的.
想知道是否有人知道这两个要求是如何共存的.
目前我在我的Rails应用程序中使用backbone-rails.我想知道如何使用客户端Haml/Jade backbone.js与gem和rails资产pipline.
我正在尝试在Rails 3.1应用程序中使用CKEditor.我在app/assets/javascripts/ckeditor /中有ckeditor目录,删除了未压缩和模块化的源等无关的东西.
它在开发中工作正常.在生产或登台环境中,ckeditor找不到它自己的文件:config.js,lang/en.js skins/kama/editor.css.我可以看到这些文件没有被预编译,这是有道理的,因为默认情况下资产管道不会包含或预编译与/.css/或/.js/匹配的任何内容.
根据rails docs和之前的答案,如下所示,添加config.assets.precompile所需的文件应该是解决方案.然而,尽管付出了大量的努力,我无法弄清楚我应该使用config.assets.precompile的格式.它没有记录,也没有给出任何例子.
我试过按名称显式添加文件:
config.assets.precompile << ['config.js', 'en.js', 'editor.css']
Run Code Online (Sandbox Code Playgroud)
我尝试添加与文件匹配的正则表达式:
config.assets.precompile << [ /.*config\.js/, /.*en.js/, /.*editor.css/ ]
Run Code Online (Sandbox Code Playgroud)
我试过明确添加完整路径:
config.assets.precompile << File.join(Rails.root, 'app', 'assets', 'javascripts', 'ckeditor', 'config.js')
(etc...)
Run Code Online (Sandbox Code Playgroud)
在所有这些情况下(以及我尝试过的所有其他情况),运行rake资产:预编译仍然无法将我需要的文件移动到公共/资产中.所有图像都是如此,但不是CKEditor需要运行的三个javascript和/或css文件.
有什么想法吗?
我开始了一个新的Rails 3.2.5项目,资产管道不再工作了.CSS和Javascript文件不再编译.
这是尝试生成资产时日志的输出:
Started GET "/assets/application.css?body=1" for 127.0.0.1 at 2012-06-16 23:59:11 -0700
Served asset /application.css - 200 OK (0ms)
[2012-06-16 23:59:11] ERROR NoMethodError: undefined method `each' for nil:NilClass
/Users/greg/.rbenv/versions/1.9.2-p290/lib/ruby/gems/1.9.1/gems/rack-1.3.6/lib/rack/handler/webrick.rb:71:in `service'
/Users/greg/.rbenv/versions/1.9.2-p290/lib/ruby/1.9.1/webrick/httpserver.rb:111:in `service'
/Users/greg/.rbenv/versions/1.9.2-p290/lib/ruby/1.9.1/webrick/httpserver.rb:70:in `run'
/Users/greg/.rbenv/versions/1.9.2-p290/lib/ruby/1.9.1/webrick/server.rb:
Started GET "/assets/application.js?body=1" for 127.0.0.1 at 2012-06-16 23:59:11 -0700
Served asset /application.js - 200 OK (0ms)
[2012-06-16 23:59:11] ERROR NoMethodError: undefined method `each' for nil:NilClass
/Users/greg/.rbenv/versions/1.9.2-p290/lib/ruby/gems/1.9.1/gems/rack-1.3.6/lib/rack/handler/webrick.rb:71:in `service'
/Users/greg/.rbenv/versions/1.9.2-p290/lib/ruby/1.9.1/webrick/httpserver.rb:111:in `service'
/Users/greg/.rbenv/versions/1.9.2-p290/lib/ruby/1.9.1/webrick/httpserver.rb:70:in `run'
/Users/greg/.rbenv/versions/1.9.2-p290/lib/ruby/1.9.1/webrick/server.rb:183:in `block in start_thread'
183:in `block in start_thread'
Run Code Online (Sandbox Code Playgroud)
更新:
<!DOCTYPE html>
<html>
<head> …Run Code Online (Sandbox Code Playgroud) 我正在开发一个带有Angular驱动前端的Rails应用程序.我想将我的Rails资产文件夹中的图像包含到一个视图中,该视图仅在某些上下文中使用ng-switch指令显示.我尝试了几个解决方案,像打字所有其他的文件路径(Rails的服务)图像到src了的<img>标签.我还尝试在持有角度控制器的coffeescript文件中添加一个erb后缀,然后执行以下操作:
$scope.logoSrc = '<%= asset_path("images/logo_grey.png") %>'
Run Code Online (Sandbox Code Playgroud)
并ng-src在图像标签中使用指令,但产生了404.
很高兴发布更多我的代码,如果它有用.在此先感谢您的帮助!
我过去经常使用Rails,并且喜欢Rails 3和4中的Asset Pipeline.
现在,我的公司团队已经从Rails转向使用Maven的JSP :(
对于提供Rails Asset Pipeline类似功能的JSP Maven项目,是否有任何解决方案?如
首先,我需要这个适用于JavaScript.如果它也适用于CSS,很棒.如果它也适用于图像,奖励积分.如果它适用于RequireJS,还有额外的奖励积分.
最后,我设想这允许<head>通过类似的东西链接到文档中的脚本
<pipeline:scripts ref="app/app.js">
Run Code Online (Sandbox Code Playgroud)
这将与Rails方式相提并论,
<% javascript_include_tag 'app/app.js' %>
Run Code Online (Sandbox Code Playgroud)
这会导致
<script type="text/javascript" href="/my-app/resources/js/app/app-943a20b66ab086745dae8d4a08dfb530.js"></script>
Run Code Online (Sandbox Code Playgroud)
到目前为止,我已经找到了这个,现在正在尝试:https://github.com/dwelch2344/asset-pipeline.还有其他解决方案吗?我也对Grunt型解决方案持开放态度.
我有一个带nginx的生产服务器 - > unicorn - > rails.我预编译资产,将资产放在公共/资产中,并在文件名后附加指纹(哈希).但是,当请求网页时,对application.css和application.js资产的引用将具有错误的指纹.例如,rails helper stylesheet_link_tag将生成服务器上public/assets中不存在的文件名,因为请求的指纹与预编译的指纹不匹配.图像资产工作正常(指纹匹配).
对此进行故障排除,我在本地计算机上预编译了资产,指纹与我服务器上的预编译指纹匹配.此外,当在生产模式下使用webrick在本地运行时,一切正常.然后我尝试在我的服务器上运行webrick,这有效,让我觉得独角兽是问题的根源.
我已经通过使用--no-default-middleware(或-N)选项启动unicorn解决了这个问题,这使得独角兽的行为与预编译资产相同.我的理解是,这告诉独角兽不要加载一个默认的Rack中间件集,否则它会加载.但是,我真的不明白为什么这会解决问题,或者首先出现问题.到底是怎么回事?
一些细节:Ubuntu 12.04,Rails 4.0.1,Ruby 2.1.0,带有第三方主题的bootstrap 3.0
更新:
我不相信这是一个nginx问题的原因是,当我从浏览器请求页面,然后查看源文件时,application.css文件的文件名有指纹,所以它实际上看起来像application-3855b1928b94aa5bff5e1dac1aa56882. CSS.这与我服务器上文件的真实指纹不匹配.我确信服务器上的指纹是正确的,因为我在本地开发机器上获得了相同的指纹.所以客户端正在加载网页,然后向服务器询问.css文件... nginx接收到该请求,但找不到.css文件,因为它实际上不存在,所以nginx的行为符合预期.
指纹生成两次:一旦我预编译资产,这是正常工作(非常肯定),并且正在发生没有独角兽参与.第二次,当独角兽工作者的上下文中的rails看到stylesheet_link_tag帮助程序并且即时计算指纹时(我认为这就是它正在做的事情),这由于某种原因产生了错误的指纹.如果我在完全相同的服务器上用webrick替换unicorn会发生同样的过程,但在这种情况下指纹匹配.如果我用-N标志开始独角兽,指纹匹配,但我不知道为什么这会有所不同,我不知道为什么没有其他人似乎必须这样做.
我对Rails刚起步(通常是Web开发),所以我试图将Get Shit Done UI Kit(GSD)添加到我现有的Rails-Bootstrap应用程序中(已经使用bootstrap-railsgem 安装了Bootstrap )。
这些是此特定套件随附的文件:
x_get_shit_done
--assets
---css
-----demo.css
-----get-shit-done.css
-----gsdk-base.css
-----gsdk-checkbox-radio-switch.css
-----gsdk-sliders.css
---img
---js
-----custom.js
-----get-shit-done.js
-----gsdk-bootstrapswitch.js
-----gsdk-checkbox.js
-----gsdk-radio.js
-----jquery-ui-1.10.4.custom.min.js
--bootstrap3
--index.html
Run Code Online (Sandbox Code Playgroud)
这是在示例模板中调用样式表的方式:
<link href="bootstrap3/css/bootstrap.css" rel="stylesheet" />
<link href="assets/css/get-shit-done.css" rel="stylesheet" />
<link href="assets/css/demo.css" rel="stylesheet" />
Run Code Online (Sandbox Code Playgroud)
但是在我的Rails应用程序中,样式表/ JS的调用方式如下:
<%= stylesheet_link_tag "application", media: "all", "data-turbolinks-track" => true %>
<%= javascript_include_tag "application", "data-turbolinks-track" => true %>
Run Code Online (Sandbox Code Playgroud)
我知道Rails提供了一些魔术来以这种方式向项目添加样式表,但是我不太了解该魔术如何应用于添加新的自定义样式表。
另外,我的应用程序中(遵循教程)的所有CSS文件均为Sass(.css.scss),所有HTML文件均为嵌入式Ruby(.html.erb),并且已经使用bootstrap-railsgem 安装了Bootstrap 。
我是否需要通过UI工具包将CSS文件转换为Sass?GSD没有任何特色,因此似乎有必要手动添加所有样式,这就是我认为无法解决的问题。
感谢您耐心等待nooby的问题:)
我正在从资产管道迁移到Rails 4应用程序中的Webpack 2。除了在.js.erb视图中使用jQuery的JS代码外,其他一切似乎都可以正常工作。
webpack.config.js的内容如下(指纹和压缩的省略代码):
const path = require('path')
const webpack = require('webpack')
const ExtractTextPlugin = require('extract-text-webpack-plugin')
const jsOutputTemplate = 'javascripts/[name].js'
const cssOutputTemplate = 'stylesheets/[name].css'
module.exports = {
context: path.join(__dirname, '/app/assets'),
entry: {
application: ['./javascripts/application.js', './stylesheets/application.scss']
},
output: {
path: path.join(__dirname, '/public'),
filename: jsOutputTemplate
},
module: {
rules: [
{
test: /\.js$/,
exclude: /node_modules/,
loader: 'babel-loader',
options: {
presets: ['es2015']
}
},
{
test: /\.css$/,
use: ExtractTextPlugin.extract(['css-loader', 'resolve-url-loader'])
},
{
test: /\.s(a|c)ss$/,
use: ExtractTextPlugin.extract(['css-loader', 'resolve-url-loader', 'sass-loader?sourceMap'])
},
{ …Run Code Online (Sandbox Code Playgroud)