我正在关注https://devcenter.heroku.com/articles/direct-to-s3-image-uploads-in-rails#jquery-file-upload-callbacks教程,以便在本地开发环境中使用s3_direct_upload.有一些javascripts为每个文件字段设置fileupload函数.如果我只是简单地在表单下面包含代码,这一切都很有效,但是如果我将代码放在js.erb文件下面,它就不起作用了app/assets/javascripts/.错误是:
ActionView::Template::Error (undefined method `url' for nil:NilClass
(in /s3_direct_upload_gem_test/app/assets/javascripts/s3_direct_upload.js.erb)):
18:
19: <%= @s3_direct_post.url %>
20:
21: <%= javascript_include_tag :s3_direct_upload %>
app/assets/javascripts/s3_direct_upload.js.erb:14:in `block in singleton class'
Run Code Online (Sandbox Code Playgroud)
如您所见,line 19从上面的代码用于打印出@ s3_direct_post.url.当我在文件中包含所有javascript时,它被正确打印.如果我跟踪中的第14行s3_direct_upload.js.erb,则为以下url行:
fileInput.fileupload({
fileInput: fileInput,
url: '<%= @s3_direct_post.url %>',
type: 'POST',
autoUpload: true,
formData: <%= @s3_direct_post.fields.to_json.html_safe %>,
Run Code Online (Sandbox Code Playgroud)
看起来由于某种原因,文件assets夹下的javascript文件(在资产管道中)是单独编译的,所以@s3_direct_post在Controller此处未设置.
当然,我总是把它放在<script>查看器文件中,但它不是很优雅.有没有办法分离页面特定的js编码和解决上面的问题?
我试图从控制器中调用image_url(来自ActionView::Helpers::AssetUrlHelper模块).我的控制器是一个API控制器,可以呈现json响应.因此,控制器准备对象,我jBuilder用于呈现实际的JSON响应.这是代码:
class Api::Mobile::HomeController < Api::Mobile::ApplicationController
include ActionView::Helpers::AssetUrlHelper
def index
@items = [Api::Mobile::HomePageItem.new(
type: 'image',
image: image_url("api/mobile/home/tutor-with-student.jpg"))]
end
end
Run Code Online (Sandbox Code Playgroud)
该图像tutor-with-student.jpg存在于以下文件夹中:
app/assets/images/api/mobile/home/tutor-with-student.jpg
Run Code Online (Sandbox Code Playgroud)
问题是image_url返回值:
http://myhost.com/images/api/mobile/home/tutor-with-student.jpg
Run Code Online (Sandbox Code Playgroud)
代替
http://myhost.com/assets/api/mobile/home/tutor-with-student.jpg
Run Code Online (Sandbox Code Playgroud)
请注意,当我使用image_url实际视图时,该方法返回正确的值.
如何image_url在Controller层上使用该方法以使其返回正确的值?
我想在我的Rails 4应用程序中使用material-ui组件库.我目前正在使用react-rails gem将.jsx编译添加到资产管道.我在gemfile中通过rails-assets添加了material-ui,如下所示:
source 'https://rails-assets.org' do
gem 'rails-assets-material-ui'
end
Run Code Online (Sandbox Code Playgroud)
我在我的application.js文件中需要这样的库:
//= require material-ui
Run Code Online (Sandbox Code Playgroud)
但是我不断收到错误"找不到文件'材料-ui".如何使用react-rails gem在我的Rails应用程序中使用material-ui组件库?
我刚刚将我的 Dropbox 帐户从个人帐户升级为企业帐户。结果,它将我的主要保管箱名称从“Dropbox”更改为“公司名称 Dropbox”。
现在,当我尝试启动 Rails 应用程序或执行rails assets:precompile以下操作时,出现以下错误:
$ rails assets:precompile
yarn install v1.22.0
[1/4] Resolving packages...
success Already up-to-date.
? Done in 0.15s.
rails aborted!
URI::InvalidURIError: bad URI(is not URI?): file-digest:///Users/name/Company Name Dropbox/Username/appfolder/jsp/app/assets/stylesheets/trestle/_variables.scss
/.rvm/gems/ruby-2.5.1@myapp/gems/sprockets-3.7.2/lib/sprockets/uri_utils.rb:45:in `split_file_uri'
/.rvm/gems/ruby-2.5.1@myapp/gems/sprockets-3.7.2/lib/sprockets/uri_utils.rb:126:in `parse_file_digest_uri'
/.rvm/gems/ruby-2.5.1@myapp/gems/sprockets-3.7.2/lib/sprockets.rb:159:in `block in <module:Sprockets>'
/.rvm/gems/ruby-2.5.1@myapp/gems/sprockets-3.7.2/lib/sprockets/dependencies.rb:67:in `resolve_dependency'
/.rvm/gems/ruby-2.5.1@myapp/gems/sprockets-3.7.2/lib/sprockets/cached_environment.rb:23:in `block in initialize'
/.rvm/gems/ruby-2.5.1@myapp/gems/sprockets-3.7.2/lib/sprockets/cached_environment.rb:59:in `resolve_dependency'
Run Code Online (Sandbox Code Playgroud)
我已经更新到 Rails 的最新可用版本5.2.4.3。
如何在不更改项目位置的情况下解决此问题?我需要将它留在我的 Dropbox 文件夹中。
我刚刚升级到 Rails 6 并按照指南制作了这个清单文件:
//= link_tree ../fonts
//= link_tree ../images
//= link_directory ../javascripts .js
//= link_directory ../stylesheets .css
Run Code Online (Sandbox Code Playgroud)
但 Rails 抱怨我没有添加资产/images/subfolder/
我如何链接到/images它及其下的所有内容?
我一直在尝试在我的项目中借助 Tailwind 添加背景图片,但它不起作用,我猜是因为某个地方的资产管道冲突?
我尝试过的:
tailwind.config像这样
直接将图像插入我的: 'essential-oil': "url('/assets/images/essential-oil.png')",'essential-oil': "asset-url('essential-oil.png')"style: "background-image:url(/assets/images/essential-oil.png)Public所有解决方案都不起作用。最糟糕的是,我的所有样式最多都会从我的 HTML 中消失,样式看起来不错,但图片不存在。任何想法 ?
谢谢。
我想将我的application.css文件更改为sass文件,并使用@import来提取所有必需的文件.然后我想将application.css.sass @import转换为特定于页面的sass文件.这一切在开发中都很漂亮,但是当我将它推送到heroku上的生产环境时,我得到了这个错误:
Error compiling CSS asset
Sass::SyntaxError: File to import not found or unreadable: application
Run Code Online (Sandbox Code Playgroud)
application.css.sass:
@import "reset"
@import "typography"
@import "buttons"
@import "junk"
$yellow: #f0f090
$orange: #f89818
$blue1: #184898
$blue2: #4888c8
body
background: ...
...
/* all the rest of the app-wide styling */
Run Code Online (Sandbox Code Playgroud)
uniquePage.css.sass:
@import "application"
/*page specific styling*/
Run Code Online (Sandbox Code Playgroud)
然后在需要与application.css不同的东西的页面上调用
!!! 5
%html
%header
= stylesheet_link_tag "uniquePage"
Run Code Online (Sandbox Code Playgroud) 我正在阅读"Rails教程:通过示例学习Rails 3.2"一书,但我在第4章末尾有一个小问题.
在本书中,您下载Blueprint css框架,将其添加到/ vendor/assets/stylesheets,然后使用以下命令在layouts/application.html.erb中引用它:
<%= stylesheet_link_tag 'blueprint/screen', :media => 'screen' %>
<%= stylesheet_link_tag 'blueprint/print', :media => 'print' %>
<!--[if lt IE 8]><%= stylesheet_link_tag 'blueprint/ie' %><![endif]-->
Run Code Online (Sandbox Code Playgroud)
这在我的本地机器上工作正常,但是当我使用它将它部署到heroku(雪松)时
$ bundle exec rake assets:precompile
$ git push heroku
Run Code Online (Sandbox Code Playgroud)
我查看网站时出错:
app[web.1]: Completed 500 Internal Server Error in 71ms
app[web.1]: ActionView::Template::Error (blueprint/screen.css isn't precompiled):
app[web.1]: 4: <%= stylesheet_link_tag 'blueprint/screen', media: 'screen' %>
app[web.1]: 5: <%= stylesheet_link_tag 'blueprint/print', media: 'print' %>
Run Code Online (Sandbox Code Playgroud)
目前,我能够使其工作的唯一方法是通过将其放入生产中来手动告知有关蓝图样式表的信息.rb
config.assets.precompile += %w( blueprint/screen.css blueprint/print.css blueprint/ie.css )
Run Code Online (Sandbox Code Playgroud)
难道我做错了什么?有没有办法rake assets:precompile自动缩小/压缩/ …
我正在将现有的rails 2应用更新到rails 3,并且在理解资产管道时遇到一些麻烦.我已经阅读了指南,据我了解,以下任何目录中的文件都将解析为/ assets:
并且您可以使用帮助程序访问它们...即
image_tag('logo.png')
Run Code Online (Sandbox Code Playgroud)
但我不明白的是如何处理碰撞?例如,如果有以下文件,该怎么办:
如果我去myapp.com/assets/images/logo.png,将返回哪个文件?我可以在我的应用程序中手动检查碰撞,但这在使用依赖资产管道的宝石时成为一个痛点.
我正在尝试构建一个"管理后端"Rails引擎.假设引擎具有以下资产:
ENGINE/app/assets
??? javascripts
? ??? railsyard
? ??? admin.js.coffee
? ??? admin_customizations.js.coffee
...
Run Code Online (Sandbox Code Playgroud)
当admin.js.coffee被要求admin_customizations.js.coffee,就是一个空文件准备由托管Rails应用程序覆盖.
[ENGINE/app/assets/javascripts/my_engine/admin.js.coffee]
#= require admin_customizations
# ...some code...
[ENGINE/app/assets/javascripts/my_engine/admin_customizations.js.coffee]
# Override this empty file to add custom JS behaviour!
Run Code Online (Sandbox Code Playgroud)
一切都运行得很好,直到我试图要求一些来自二级宝石的资产:
[APP/app/assets/javascripts/my_engine/admin_customizations.js.coffee]
#= require modernizr # this line gets ignored
alert "Foobar" # this line works
Run Code Online (Sandbox Code Playgroud)
gem modernizr-rails是托管应用程序的依赖,而不是引擎.请注意,如果我尝试modernizr从资产文件中要求不是某个引擎资产文件的覆盖,那么一切都会再次起作用.
有办法解决这种情况吗?
asset-pipeline ×10
heroku ×2
assets ×1
environments ×1
javascript ×1
react-jsx ×1
react-rails ×1
reactjs ×1
ruby-2.5 ×1
sass ×1
tailwind-css ×1