ruby-on-rails - Rails App 未在生产模式下使用自定义 Assets 文件夹提供 Assets

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

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

在运行 rails server 之前,我运行了 RAILS_ENV=production rake assets:precompile --trace
我在供应商下添加了两个 Assets 文件夹

application.rb文件,我插入一行

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

并更改了config.serve_static_assetstrue
+++ 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 之间的 TreeView

合理吗?

在公共(public)/ Assets 下
% tree lenord-single-page-theme                                                                                                                               (git)-[feature/prettier_form] 
lenord-single-page-theme
└── js
    ├── application-dfabb3389cb2e71ba110a8589e5e106b.js
    └── application-dfabb3389cb2e71ba110a8589e5e106b.js.gz

在供应商/主题/下
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

最佳答案

管道 Assets 可以放置在三个位置之一的应用程序中:app/assets、lib/assets 或 vendor/assets。
您已将 Assets 放置在 vendor/assets 和 vendor/themes 中。

预编译附加 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

在公共(public)/ Assets 下查看:

该文件应预编译

vendor/themes/lenord-single-page-theme/js/custom.js



或者

lenord-single-page-theme/js/custom.js



然后像这样调用自定义 Assets 文件:

javascript_include_tag "PATH_OF_THE_ASSET"



例如:

javascript_include_tag "lenord-single-page-theme/js/custom.js"



或者

javascript_include_tag "vendor/themes/lenord-single-page-theme/js/custom.js"

关于ruby-on-rails - Rails App 未在生产模式下使用自定义 Assets 文件夹提供 Assets ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23750596/

相关文章:

ruby-on-rails - 不能用 Rspec stub

ruby-on-rails - rails : Why do asset fingerprints differ depending on where the assets are compiled?

ruby-on-rails - 分离的 gem 上的rake gems:refresh_specs错误

ruby-on-rails - 我可以在 rake 任务中包含辅助方法吗

ruby-on-rails - 使用 FactoryGirl 构建一个 json stub

ruby-on-rails - postgresql 数据库迁移中的关系问题

ruby-on-rails - 如何使用 Rails 使用 CoffeeScript 进行开发

ruby-on-rails - 抽成 Assets :precompile takes 28 minutes on 1. 9.2

ruby-on-rails - 带分页的 Rails 随机事件记录

ruby-on-rails - 错误 Rails - libxml-Ruby