当我thin像这样加载:
thin start -e production
Run Code Online (Sandbox Code Playgroud)
并尝试访问我的一个页面,我在日志输出中得到这个:
cache: [GET /] miss
cache: [GET /assets/main-bd1ef4b153740fb69fd615304b87ad0d.css] miss
cache: [GET /assets/jqModal-8fa734bf4f58524b2799abd73ab7d34f.css] miss
cache: [GET /assets/jquery-544665ba1d5b4f793290421aafed85c9.js] miss
cache: [GET /assets/application-00b97aa2429046c0c43802f07b756b46.js] miss
Run Code Online (Sandbox Code Playgroud)
这些文件存在于我的assets目录下public.
我也运行这个命令:
RALS_ENV=production rake assets:precompile
Run Code Online (Sandbox Code Playgroud)
我试过/public/assets/application.js在浏览器中访问该文件,如下所示:
http://localhost:3000/application.js
Run Code Online (Sandbox Code Playgroud)
这给了我一个404错误(即使该文件存在/public/assets但是当我在服务器处于开发模式时向文件发出请求时可以读取该文件.
有人有主意吗?
我正在使用Ruby on Rails 3.1,我想知道如何在javascript资产中渲染部分内容.
我的目标是:
# in /app/assets/javascript/cart.js.coffee.erb
$('a.add_sth').click -> $('.random_container').append('<%= render partial: 'way/to/partial' %>')
Run Code Online (Sandbox Code Playgroud)
这会导致NoMethodError:
undefined method `render' for #<#<Class:0x007fc54584c6e8>:0x007fc5474cd470>
Run Code Online (Sandbox Code Playgroud)
如果我写,<%= 2+3 %>它工作正常,顺便说一句.
我认为问题是资产管道独立于默认的ActionView,这就是为什么render()在那里未知.无论如何,有没有办法让部分内容呈现?
config/application.rb
...
# Enable the asset pipeline
config.assets.enabled = true
# Version of your assets, change this if you want to expire all your assets
config.assets.version = '1.0'
config.assets.digest = true
config.assets.paths << "#{Rails.root}/vendor/assets/images"
...
config/environment.rb
...
ENV['RAILS_ENV'] ||= 'production'
...
My gemfile
...
gem 'uglifier'
# Gems used only for assets and not required
# in production environments by default.
group :assets do
gem 'sass-rails', " ~> 3.1.0"
gem 'coffee-rails', "~> 3.1.0"
#gem 'uglifier'
end
...
environment/production.rb
....
config.active_support.deprecation …Run Code Online (Sandbox Code Playgroud) 我收到以下错误:
Sprockets::Helpers::RailsHelper::AssetPaths::AssetNotPrecompiledError in Photos#edit
Showing .../app/views/photos/_form.html.haml where line #49 raised:
taxonomy/focus-building.jpg isn't precompiled
Extracted source (around line #49):
46: = focus.code
47: .tooltip
48: %span.name= focus.name
49: = image_tag("taxonomy/focus-#{focus.code.downcase.dehumanize}.jpg")
50: / Help Overlay
51: .help
52: %a.overlay{:href=>"#", :rel=>'#help-focus'} Learn more about focus
Run Code Online (Sandbox Code Playgroud)
此图像文件位于app/assets/images/taxonomy/focus-building.jpg.我已经运行了rake assets:precompile RAILS_ENV=production,但据我所知,图像没有被复制到public/assets目录中.
奇怪的是,SCSS中引用的所有资产都image-url()可以正常使用.为什么这个图像报告在被引用时没有被预编译image_tag?
使用Rails 3.1.1让我的资产管道设置与Heroku/Cedar一起使用时遇到了一些麻烦
我已推送我的应用程序并成功启动,但没有消息说"准备资产管道"并且没有提供静态资产.由于没有slug编译时间或运行时资产编译,因此无法找到JS,CSS或图像.
任何帮助将不胜感激.
他们描述了在此链接部署期间应该发生的事情,我将在下面总结:
使用Heroku Cedar上的Rails 3.1应用程序,当你git push heroku时,你的资产将通过使用rake任务包exec rake assets:precompile预先编译为部署过程的一部分.
在我的rails 3.1.3应用程序中,我想在我的javascript文件中插入一些ERB代码但是由于某种原因它没有被解析:
# app/assets/javascripts/application.js
//= require_tree ./shared
# app/assets/javascripts/shared/shared.js.erb
MM.loading = '<img src="<%= asset_path("icons/ajax-loader.gif") >">';
Run Code Online (Sandbox Code Playgroud)
获取如下所示/application.js:
MM.loading = '<img src=" asset_path("icons/ajax-loader.gif") >">';
Run Code Online (Sandbox Code Playgroud)
我在导轨指南中看不到任何额外的步骤 - 有什么我想念的吗?顺便说一下,我正在使用haml作为视图文件,并且还尝试了上面的内容.js.haml,包含在中#{...}.
我正在尝试创建一个包装d3.js的gem,Source可以在https://github.com/iblue/d3-rails找到
所以当我在我的Gemfile中包含这个gem时
gem "d3-rails", :git => "git://github.com/iblue/d3-rails.git"
Run Code Online (Sandbox Code Playgroud)
当我在我的application.js中包含javascript时:
//=require d3
Run Code Online (Sandbox Code Playgroud)
然后我的资产编译失败,我编译的application.js只包含
throw Error("Encoding::CompatibilityError: incompatible character encodings: UTF-8 and ASCII-8BIT")
Run Code Online (Sandbox Code Playgroud)
我正在使用Rails 3.1.3和ruby-1.9.3-p125.jQuery使用完全相同的gem结构,它的工作原理.我究竟做错了什么?
编辑:
我也看到了这个问题:Ruby 1.9抛出javascript编码错误.这不适用于此,我的文件是有效的UTF-8:
ruby-1.9.3-p125 :001 > d = File.read("./d3.js")
=> [...]
ruby-1.9.3-p125 :002 > d.encoding
=> #<Encoding:UTF-8>
ruby-1.9.3-p125 :003 > d.valid_encoding?
=> true
Run Code Online (Sandbox Code Playgroud)
编辑2:
我也尝试在我的插页中插入一些伏都教config/environment.rb.这是行不通的:
# -*- encoding : utf-8 -*-
# Load the rails application
require File.expand_path('../application', __FILE__)
# --------- VOODOO BEGINS HERE -----------------
Encoding.default_external = Encoding::UTF_8
Encoding.default_internal = Encoding::UTF_8 …Run Code Online (Sandbox Code Playgroud) javascript rubygems ruby-on-rails ruby-on-rails-3.1 asset-pipeline
我正在使用I18n-js,而我的客户端I18n.t调用在生产中运行时都返回翻译缺失消息.
一切都可以开发和测试.
此问题的根源似乎在资产管道中.
I18n.load_path不包含我的任何翻译(运行bin/rake资产:预编译时)它只包含以下路径:
["/home/chris/.rvm/gems/ruby-1.9.3-p125@Project/gems/activesupport-3.2.3/lib/active_support/locale/en.yml",
"/home/chris/.rvm/gems/ruby-1.9.3-p125@Project/gems/activemodel-3.2.3/lib/active_model/locale/en.yml",
"/home/chris/.rvm/gems/ruby-1.9.3-p125@Project/gems/activerecord-3.2.3/lib/active_record/locale/en.yml",
"/home/chris/.rvm/gems/ruby-1.9.3-p125@Project/gems/actionpack-3.2.3/lib/action_view/locale/en.yml"]
Run Code Online (Sandbox Code Playgroud)
这些看起来像来自gems的默认activesupport,activemodel,activerecord和actionpack翻译......
但是,在开发和生产中运行bin/rails控制台时,我的转换路径会按预期进行设置:
1.9.3p125 :002 > I18n.load_path
=> ["/home/chris/.rvm/gems/ruby-1.9.3-p125@Project/gems/activesupport-3.2.3/lib/active_support/locale/en.yml",
"/home/chris/.rvm/gems/ruby-1.9.3-p125@Project/gems/activemodel-3.2.3/lib/active_model/locale/en.yml",
"/home/chris/.rvm/gems/ruby-1.9.3-p125@Project/gems/activerecord-3.2.3/lib/active_record/locale/en.yml",
"/home/chris/.rvm/gems/ruby-1.9.3-p125@Project/gems/actionpack-3.2.3/lib/action_view/locale/en.yml",
"/home/chris/.rvm/gems/ruby-1.9.3-p125@Project/gems/carrierwave-0.6.1/lib/carrierwave/validations/../locale/en.yml",
"/home/chris/.rvm/gems/ruby-1.9.3-p125@Project/gems/devise-2.0.4/config/locales/en.yml",
"/media/sf_code/Project/config/locales/active_record.en.yml",
"/media/sf_code/Project/config/locales/project.en.yml"]
Run Code Online (Sandbox Code Playgroud)
事实上,I18n文档指出:"默认语言环境是:en和来自config/locales/*.rb,yml的所有翻译都是自动加载的."
我也试过在application.rb中指定
config.i18n.load_path += Dir[Rails.root.join('config', 'locales', '*.{rb,yml}').to_s]
Run Code Online (Sandbox Code Playgroud)
但仍然没有快乐.
任何人都知道什么可能导致I18n.load_path只在运行资产时才设置:precompile?
谢谢你的任何想法
如果我可以使用rails资产管道预编译slim模板,那将会非常方便.我希望将我的模板粘贴在app/assets/html中并以这种方式提供它们.
这是我到目前为止所得到的:
# config/initializers/slim.rb
Rails.application.assets.register_engine('.slim', Slim::Template)
# config/application.rb
config.assets.paths << "#{Rails.root}/app/assets/html"
config.assets.register_mime_type('text/html', '.html')
Run Code Online (Sandbox Code Playgroud)
运行rake资产:预编译读取app/assets/html中的.html.slim文件,但它不编译它们,输出文件仍然具有.slim扩展名.
有没有办法让这项工作?
我正在试图弄清楚如何在我的application.js中加载资产.
我在application.js中有这些必需的文件(以及其他文件).
//= require bootstrap-sprockets
//= require jquery
//= require jquery-ui
//= require jquery_ujs
Run Code Online (Sandbox Code Playgroud)
我的宝石文件有:
gem 'jquery-rails'
gem 'jquery-ui-rails'
Run Code Online (Sandbox Code Playgroud)
当bootstrap-sprockets在jQuery之前时,我的bootstrap下拉菜单(如下)工作正常.
<div class="row" style="margin-top:30px">
<div class="col-md-3 col-md-offset-8">
<% if policy(@project).show? %>
<div class="btn-group">
<button type="button" style="color: black" class="btn btn-default dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
STATUS: <%= text_for_state(@project.current_state) %> <span class="caret"></span>
</button>
<ul class="dropdown-menu">
<% if policy(@project).request_preapproval? %>
<%= link_to "REQUEST APPROVAL", request_preapproval_project_path(@project), method: :put, :style=>"padding-left:20px; padding-right: 10px" %>
<% end %>
<li role="separator" class="divider"></li>
<% if policy(@project).publish? %>
<%= link_to "PUBLISH", publish_project_path(@project), …Run Code Online (Sandbox Code Playgroud) javascript jquery ruby-on-rails asset-pipeline twitter-bootstrap