ruby-on-rails - 在 Rail 5.4.2 中找不到 rails_admin.css
问题描述
Rails Admin 在本地为我工作,但是当我部署到 Heroku 时,它失败了:
ActionView::Template::Error (The asset "rails_admin/rails_admin.css" is not present in the asset pipeline
我在 Rails 5.2.6 和 Rails Admin 2.0.2 上
我用这一行添加了 initializers/assets.rb:
Rails.application.config.assets.precompile += ['rails_admin/rails_admin.css', 'rails_admin/rails_admin.js']
但这些文件不存在于 assets/javascripts 和 assets/stylessheets 中。
这个应用程序最初是作为一个仅 API 的应用程序构建的,但我添加了所有缺少的中间件以使其像普通的 Rails 应用程序一样工作。
这是我的应用程序.rb:
require_relative 'boot'
require "rails"
# Pick the frameworks you want:
require "active_model/railtie"
require "active_job/railtie"
require "active_record/railtie"
require "action_controller/railtie"
require "action_mailer/railtie"
require "action_view/railtie"
require "action_cable/engine"
require "sprockets/railtie"
# require "rails/test_unit/railtie"
# Require the gems listed in Gemfile, including any gems
# you've limited to :test, :development, or :production.
Bundler.require(*Rails.groups)
module CheckwizApi
class Application < Rails::Application
# Initialize configuration defaults for originally generated Rails version.
config.load_defaults 5.1
# Settings in config/environments/* take precedence over those specified here.
# Application configuration should go into files in config/initializers
# -- all .rb files in that directory are automatically loaded.
# Only loads a smaller set of middleware suitable for API only apps.
# Middleware like session, flash, cookies can be added back manually.
# Skip views, helpers and assets when generating a new resource.
config.api_only = false
# use uuid's as primary_key
config.active_record.primary_key = :uuid
config.generators do |g|
g.orm :active_record, primary_key_type: :uuid
end
config.i18n.default_locale = :en
config.active_job.queue_adapter = :sidekiq
# Added because RailsAdmin needs them
config.middleware.use ActionDispatch::Cookies
config.middleware.use ActionDispatch::Flash
config.middleware.use Rack::MethodOverride
config.middleware.use ActionDispatch::Session::CookieStore
end
end
请注意,我已经设置config.api_only = false
并添加了所需的中间件,但无济于事。如果我将其设置为 true,同样的错误。如果我删除上面添加的资产文件,同样的错误。
assets/javascripts 和 assets/stylesheets 文件夹是空的。那是问题吗?
我查看了其他几个与此相关的已关闭问题,其中大多数建议添加上述中间件,或清除 tmp/cache 并重新启动。可悲的是,它们都没有为我工作。
解决方案
必须做很多事情来解决这个问题。
首先,我将config/initializers/assets.rb
文件更新为:
Rails.application.config.assets.enabled = true
# Prevent initializing the application before assets are precompiled (required for heroku)
Rails.application.config.assets.initialize_on_precompile = false
# Add Rails Admin assets (required)
Rails.application.config.assets.precompile += ['rails_admin/rails_admin.css', 'rails_admin/rails_admin.js']
然后,通过检查 Heroku 上的 Rails 日志:
heroku logs -t --remote production
我发现了这条线:
Detected manifest file, assuming assets were compiled locally
所以在里面public/assets
我删除了清单文件(如果你在本地编译资产就会创建它,也许我曾经做过一次尝试解决这个问题,但忘记了它在那里)。
然后,这导致 heroku 日志中出现以下错误:
Sprockets::ArgumentError: link_directory argument must be a directory
所以我然后添加了一个隐藏的空文件,分别调用里面.keep
的javascripts
和stylesheets
文件夹app/assets
现在 Heroku 将资产预编译任务作为部署的一部分运行(即在构建 slug 的同时),并创建 rails_admin js 和 css 文件。
推荐阅读
- azure - 使用表单识别器标签工具为表格添加标签
- java - Java 构造函数和 super()
- angularjs - AngularJS函数范围语法问题
- javascript - 如何处理 Typescript 中的错误返回类型?
- oracle - Oracle Docker 安装 - bash:sqlplus:找不到命令
- typescript - 自己的打字稿键
- format - 如何在arcgis中创建格式为wgs84米的正方形区域?
- reactjs - 每次屏幕出现时在useEffect中设置setState
- python - 使用 Numba 加速帧过滤
- python - 如果找到模式,则使用正则表达式在 pandas 列中插入字符串