Rails App不使用自定义资源文件夹在生产模式下提供资产

时间:2014-05-20 03:32:41

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

它可以在开发模式下查找,但在生产模式下显示ActionController::RoutingError (No route matches [GET] "/lenord-single-page-theme/js/custom.js"):错误。

在运行rails服务器之前,我运行了RAILS_ENV=production rake assets:precompile --trace

我在供应商

下添加了两个资产文件夹

application.rb文件中,我插入了行

config.assets.paths << "#{Rails.root}/vendor/themes"

并将config.serve_static_assets更改为true

+++ b/config/environments/production.rb
@@ -20,7 +20,7 @@ DqaStreesfulServer::Application.configure do
   # config.action_dispatch.rack_cache = true

   # Disable Rails's static asset server (Apache or nginx will already do this).
-  config.serve_static_assets = false
+  config.serve_static_assets = true

文件夹结构

vendor
├── assets
│   ├── javascripts
│   └── stylesheets
└── themes
    ├── ace-admin-theme
    │   ├── avatars
    │   ├── css
    │   ├── font
    │   ├── images
    │   ├── img
    │   └── js
    └── lenord-single-page-theme
        ├── css
        ├── fonts
        ├── img
        ├── index.html
        ├── js
        └── rs-assets

更新

我以这种方式引用我的js文件

welcome.html.haml
60:  %script{src:  asset_path("lenord-single-page-theme/js/custom.js")}

更新

我想问题可能在production.rb

我试图通过在production.rb

中添加此行来编译所有文件
config.assets.precompile += %w( vendor/themes/* )

我通过rails s -e production命令而不是nginx or apache

以生产模式运行服务器

更新

我在生产模式下获得ActionView::Template::Error (Invalid CSS after "}": expected selector or at-rule, was "}" 在我做了以下更改之后。

../../config/environments/production.rb

+  config.assets.compile = true
+  config.assets.precompile = [/^[-_a-zA-Z0-9]*\..*/]
+  config.assets.precompile += %w( *.js *.css )

我在这里展示了vendoe / theme /和public / assets之间的树视图

合理吗?

在公共/资产

% tree lenord-single-page-theme                                                                                                                               (git)-[feature/prettier_form] 
lenord-single-page-theme
└── js
    ├── application-dfabb3389cb2e71ba110a8589e5e106b.js
    └── application-dfabb3389cb2e71ba110a8589e5e106b.js.gz

在vendor / themes /

lenord-single-page-theme
├── css
│   ├── animate.min.css
│   ├── bootstrap.css
│   ├── bootstrap.min.css
│   ├── font-awesome.min.css
│   ├── prettyPhoto.css
│   ├── rs-settings-ie8.css
│   ├── rs-settings.css
│   └── style.css
├── fonts
│   ├── FontAwesome.otf
│   ├── fontawesome-webfont.eot
│   ├── fontawesome-webfont.svg
│   ├── fontawesome-webfont.ttf
│   └── fontawesome-webfont.woff
├── img
│   ├── 1.jpg
│   ├── 10.jpg
│   ├── 11.png
│   ├── 12.jpg
│   ├── 13.png
│   ├── 2.jpg
│   ├── 3.jpg
│   ├── 4.png
│   ├── 5.png
│   ├── 6.png
│   ├── 8.jpg
│   ├── 9.jpg
│   ├── aboutus.png
│   ├── back-top.png
│   ├── banner_1.jpg
│   ├── banner_2.jpg
│   ├── banner_3.jpg
│   ├── blue-back.png
│   ├── dummy.png
│   ├── fback.png
│   ├── portfolio
│   │   ├── 1.jpg
│   │   ├── 2.jpg
│   │   ├── 3.jpg
│   │   ├── 4.jpg
│   │   ├── 5.jpg
│   │   ├── 6.jpg
│   │   ├── 7.jpg
│   │   ├── 8.jpg
│   │   ├── 9.jpg
│   │   ├── tn1.jpg
│   │   ├── tn2.jpg
│   │   ├── tn3.jpg
│   │   ├── tn4.jpg
│   │   ├── tn5.jpg
│   │   ├── tn6.jpg
│   │   ├── tn7.jpg
│   │   ├── tn8.jpg
│   │   └── tn9.jpg
│   ├── prettyPhoto
│   │   ├── dark_rounded
│   │   │   ├── btnNext.png
│   │   │   ├── btnPrevious.png
│   │   │   ├── contentPattern.png
│   │   │   ├── default_thumbnail.gif
│   │   │   ├── loader.gif
│   │   │   └── sprite.png
│   │   ├── dark_square
│   │   │   ├── btnNext.png
│   │   │   ├── btnPrevious.png
│   │   │   ├── contentPattern.png
│   │   │   ├── default_thumbnail.gif
│   │   │   ├── loader.gif
│   │   │   └── sprite.png
│   │   ├── default
│   │   │   ├── default_thumb.png
│   │   │   ├── loader.gif
│   │   │   ├── sprite.png
│   │   │   ├── sprite_next.png
│   │   │   ├── sprite_prev.png
│   │   │   ├── sprite_x.png
│   │   │   └── sprite_y.png
│   │   ├── facebook
│   │   │   ├── btnNext.png
│   │   │   ├── btnPrevious.png
│   │   │   ├── contentPatternBottom.png
│   │   │   ├── contentPatternLeft.png
│   │   │   ├── contentPatternRight.png
│   │   │   ├── contentPatternTop.png
│   │   │   ├── default_thumbnail.gif
│   │   │   ├── loader.gif
│   │   │   └── sprite.png
│   │   ├── light_rounded
│   │   │   ├── btnNext.png
│   │   │   ├── btnPrevious.png
│   │   │   ├── default_thumbnail.gif
│   │   │   ├── loader.gif
│   │   │   └── sprite.png
│   │   └── light_square
│   │       ├── btnNext.png
│   │       ├── btnPrevious.png
│   │       ├── default_thumbnail.gif
│   │       ├── loader.gif
│   │       └── sprite.png
│   ├── product.png
│   ├── service
│   │   ├── 11.png
│   │   ├── 12.png
│   │   ├── 21.png
│   │   ├── 22.png
│   │   ├── 31.png
│   │   ├── 32.png
│   │   ├── 41.png
│   │   └── 42.png
│   ├── service.png
│   ├── vast.jpg
│   ├── vivotek_square_icon.jpg
│   ├── vvtk_sd.jpg
│   └── wood-back.png
├── index.html
├── js
│   ├── application.js
│   ├── bootstrap.js
│   ├── bootstrap.min.js
│   ├── custom.js
│   ├── gmaps.js
│   ├── html5shiv.js
│   ├── jquery.arbitrary-anchor.js
│   ├── jquery.js
│   ├── jquery.knob.js
│   ├── jquery.prettyPhoto.js
│   ├── jquery.themepunch.plugins.min.js
│   ├── jquery.themepunch.revolution.min.js
│   ├── respond.min.js
│   └── waypoints.min.js
└── rs-assets
    ├── arrow_large_left.png
    ├── arrow_large_right.png
    ├── arrow_left.png
    ├── arrow_left2.png
    ├── arrow_right.png
    ├── arrow_right2.png
    ├── arrowleft.png
    ├── arrowright.png
    ├── arrows.psd
    ├── black50.png
    ├── boxed_bgtile.png
    ├── bullet.png
    ├── bullet_boxed.png
    ├── bullets.png
    ├── bullets.psd
    ├── bullets2.png
    ├── coloredbg.png
    ├── grain.png
    ├── large_left.png
    ├── large_right.png
    ├── loader.gif
    ├── loader2.gif
    ├── navigdots.png
    ├── navigdots_bgtile.png
    ├── shadow1.png
    ├── shadow2.png
    ├── shadow3.png
    ├── small_arrows.psd
    ├── small_left.png
    ├── small_left_boxed.png
    ├── small_right.png
    ├── small_right_boxed.png
    ├── timer.png
    ├── timerdot.png
    ├── transparent.jpg
    └── white50.png

14 directories, 154 files

1 个答案:

答案 0 :(得分:1)

管道资产可以放置在三个位置之一的应用程序内: app / assets lib / assets vendor / assets 。 您已将资产放置在供应商/资产供应商/主题中。

预编译其他资产:

config.assets.precompile += ['vendor/themes/lenord-single-page-theme/js/*.js']
config.assets.precompile += ['vendor/themes/lenord-single-page-theme/css/*.css']

运行rake任务:

RAILS_ENV=production bundle exec rake assets:precompile

公共/资产下检查:

该文件应在

中预编译
  

供应商/主题/ LENORD单页面主题/ JS / custom.js

OR

  

LENORD单页面主题/ JS / custom.js

然后按以下方式调用自定义资源文件:

  

javascript_include_tag“PATH_OF_THE_ASSET”

<强>实施例

  

javascript_include_tag“lenord-single-page-theme / js / custom.js”

OR

  

javascript_include_tag   “供应商/主题/ LENORD单页面主题/ JS / custom.js”