Rails资产从错误的地方加载

时间:2014-08-25 08:17:04

标签: ruby-on-rails ruby-on-rails-4

我刚刚为一个项目编写了控制器,一切都在我的本地计算机上工作正常,但是从我的控制器视图中生成的图像来自' images / bg / *'对于javascripts(' javascripts / games /'而不是' assets / games /')而不是&assets资产/ bg' 我认为这背后的原因是因为image_tag以某种方式生成了错误的链接,但是javascripts的内容是什么?我不知道该怎么做

服务器计算机运行nginx(如果重要)

自己查看 - 这是我的控制器http://gorodigr.com/ruletka,这是另一个http://gorodigr.com/poker_kosti作为示例

enter image description here

的application.js

//
//= require jquery
//= require jquery.turbolinks
//= require  websocket_rails/main
//= //require jquery_ujs

//= //require bootstrap-alert
//= //require vallenato
//= //require websocket_rails/main
//= //require_tree .

//= require turbolinks


jQuery(document).ready(function($){ 
.
.
.
some javascript

application.css

/*
 * This is a manifest file that'll be compiled into application.css, which will include all the files
 * listed below.
 *
 * Any CSS and SCSS file within this directory, lib/assets/stylesheets, vendor/assets/stylesheets,
 * or vendor/assets/stylesheets of plugins, if any, can be referenced here using a relative path.
 *
 * You're free to add application-wide styles to this file and they'll appear at the top of the
 * compiled file, but it's generally better to create a new file per style scope.
 *
 *= require_self
 *= require main

 */

更新

现在它表现得更奇怪,同样的image_tag路径,不同的结果 image

2 个答案:

答案 0 :(得分:2)

我怀疑这些资产是否来自错误的"地点 - 它们可能受asset pipeline的运作影响,特别是如果您在production

中看到问题

-

资产管道

您遇到的主要问题可能与资产管道有关。让我解释一下

资产管道是Rails的一项功能,实际上已在Rails 4中删除(但功能仍然存在),即您的资产" (imagescssjavascripts)将保存在一系列文件夹中,这些文件夹会从您的"视图"中删除。然后,您可以根据需要调用这些

资产管道的神奇之处在于,当您在生产中运行应用程序时,它将获取您的文件,编译它们,并从完全不同的位置(public/assets)拉出它们,这条路径将被调用通过asset path helpers

-

<强>结构

最重要的是,如果您不得不关注资产的路径,那么您就无法正确行事。

只要您将资产保存在正确的文件夹中即可。使用帮助程序,您的应用程序应该正确地提供它们。关于您的具体问题,让我们看一下问题所在:

您的资产存储:

-- app
-- | assets
-- | -- | javascripts
-- | -- | -- application.js
-- | -- | -- your.js
-- | -- | -- other.js
-- | -- | -- javascripts.js

这将使您能够使用提供的不同资产路径助手调用任何这些文件:

#app/views/layouts/index.html.erb
<%= javascript_include_tag "application", "your", "other", "javascripts" %>

与此同时,您还要考虑manifest directives在资产中的角色:

#app/assets/javascriots/application.js
// ...
//= require jquery
//= require jquery_ujs
//= require_tree .

这意味着如果您在开发中调用布局中的application.js文件,它将只加载您需要的文件。如果您在生产中加载其precompiled version,它会将所有必需的文件连接到单个application.js文件

-

<强>修正

根据你的形象和&amp;更新的帖子,这是我要做的:

  
      
  1. 将所有javascripts放入正确的文件夹(/assets/javascripts
  2.   
  3. &#34;需要&#34; application.js
  4. 中需要的所有文件   
  5. 如果要包含单独的文件,请单独预编译
  6.   

首先,将所有文件放入app/assets/javascripts文件夹

其次,在application.js中修复以下问题:

//= require jquery_ujs

//= require bootstrap-alert
//= require vallenato
//= require websocket_rails/main
//= require_tree .

第三,如果你想加入/games/ruletka.js,你最好这样做:

#config/environments/production.rb
config.assets.precompile += ['games/raletka.js']

#app/views/layouts/application.html.erb
<%= javascript_include_tag "games/raletka" %>

答案 1 :(得分:0)

如果您拥有与application.js不同的资产,则必须将它们包含在预编译的配置中。

例如,在您的config / environments / production.rb中取消注释以下行并将其调整为您的资产。

# Precompile additional assets.
# application.js, application.css, and all non-JS/CSS in app/assets folder are already added.
config.assets.precompile += %w( games/ruletka.js )

图像应自动预编译,因此它们应该开箱即用。但对于CSS,您必须使用特殊助手来获取正确的URL:

.class { background-image: url(<%= asset_path 'image.png' %>) }

有关详细信息,请访问http://guides.rubyonrails.org/asset_pipeline.html

此外,如果您使用capistrano进行部署,请确保包含“capistrano-rails”gem,并启用它以允许在部署完成后预编译资产。