我刚刚为一个项目编写了控制器,一切都在我的本地计算机上工作正常,但是从我的控制器视图中生成的图像来自' images / bg / *'对于javascripts(' javascripts / games /'而不是' assets / games /')而不是&assets资产/ bg' 我认为这背后的原因是因为image_tag以某种方式生成了错误的链接,但是javascripts的内容是什么?我不知道该怎么做
服务器计算机运行nginx(如果重要)
自己查看 - 这是我的控制器http://gorodigr.com/ruletka,这是另一个http://gorodigr.com/poker_kosti作为示例
的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路径,不同的结果
答案 0 :(得分:2)
我怀疑这些资产是否来自错误的"地点 - 它们可能受asset pipeline的运作影响,特别是如果您在production
-
资产管道
您遇到的主要问题可能与资产管道有关。让我解释一下
资产管道是Rails的一项功能,实际上已在Rails 4中删除(但功能仍然存在),即您的资产" (images
,css
和javascripts
)将保存在一系列文件夹中,这些文件夹会从您的"视图"中删除。然后,您可以根据需要调用这些
资产管道的神奇之处在于,当您在生产中运行应用程序时,它将获取您的文件,编译它们,并从完全不同的位置(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;更新的帖子,这是我要做的:
- 将所有javascripts放入正确的文件夹(
/assets/javascripts
)- &#34;需要&#34; application.js
中需要的所有文件- 如果要包含单独的文件,请单独预编译
醇>
首先,将所有文件放入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,并启用它以允许在部署完成后预编译资产。