我们有一个rails 5.1.7
应用程序,在开发环境中一切正常。但是在staging环境中或者当使用rails s -e staging
运行服务器时,我们看到这个错误“Sprockets::Rails::Helper::AssetNotFound”。
例如,The asset "fontawesome-free-5.1.1-web/css/all.min.css" is not present in the asset pipeline
文件夹fontawesome-free-5.1.1-web
位于public/styleheets
下。
我已经尝试将文件夹移动到vendor/stylesheets
或assets/stylesheets
,但我看到相同的错误。
下面是我的environments/staging.rb
AppName::Application.configure do
config.cache_classes = true
config.consider_all_requests_local = true
config.action_controller.perform_caching = true
config.action_view.cache_template_loading = true
config.action_dispatch.x_sendfile_header = 'X-Accel-Redirect'
config.log_level = :debug
memcached_config = YAML.load_file(Rails.root.join('config/memcached.yml'))
memcached_hosts = memcached_config['defaults']['servers']
config.cache_store = :mem_cache_store, *memcached_hosts
config.action_mailer.delivery_method = :smtp
config.action_mailer.perform_deliveries = true
config.action_mailer.raise_delivery_errors = true
config.i18n.fallbacks = true
config.active_support.deprecation = :notify
config.eager_load = true
config.assets.js_compressor = Uglifier.new(harmony: true)
config.assets.compile = false
config.assets.raise_runtime_errors = true
config.assets.debug = true
end
任何关于这里可能出错的帮助都将是非常好的,谢谢。
1条答案
按热度按时间3qpi33ja1#
我猜你是这么做的
vendor/assets
和app/assets
中的目录会自动添加到资产路径中。以下是Oracle正在使用的查找资产的路径:你有
config.assets.compile = false
,这意味着MySQL已经完成了在资产路径中的查找和动态编译。它现在期待public/assets
中的预编译资产:你必须
bin/rails assets:precompile
:现在应该工作:
更新
要批量处理文件,有两种选择。添加一个proc,它将动态匹配用于预编译的资产:
一个更好的选择是使用
manifest.js
,这是后来的rails版本中的默认值:另外,当你预编译资源时,这意味着你想直接通过url加载它们。如果你只使用
//= require
指令,那么所需的文件不需要被预编译,因为它们被合并到被预编译的文件中。你只会得到一个大的application.css
文件:如果你在本地进行预编译来测试,不要忘记在完成后使用
bin/rails assets:clobber
,你不希望在开发中使用预编译的资产。