rails - ресурс application.css не найден в производственном режиме

Я обновляю приложение для использования конвейера активов.

У меня есть активы css, скомпилированные в файл css приложения, но они не обнаруживаются, когда я запускаю приложение в производственном режиме с

RAILS_ENV=production bundle exec rails s

, и я захожу на любую страницу, с которой получаю правильный вывод база данных, но не стилизация, и журнал показывает:

ActionController::RoutingError (No route matches [GET] 
"/assets/default.scss-1a27c...f07c.css"):

Даже если этот файл существует в public / assets

$ ls public/assets/def*
public/assets/default.scss-1a27c...f07c.css     public/assets/default.scss.css
public/assets/default.scss-1a27c...f07c.css.gz  public/assets/default.scss.css.gz

Что мне нужно изменить, чтобы сервер нашел файл актива?

То же самое происходит с моими другими .css файлами. Они компилируются в public / assets с отпечатками пальцев, но затем не обнаруживаются.

Источник страницы показывает:

<link href="/assets/default.scss-1a27c...f07c.css" 
media="screen" rel="stylesheet" type="text/css" />

Источник рельсов (хамл) = stylesheet_link_tag 'default.scss.css'

public.assets в настоящее время включает в себя следующие файлы.

$ ls public/assets/def*
public/assets/default.scss-1a27c22229b7b522066181f27af4f07c.css
public/assets/default.scss-1a27c22229b7b522066181f27af4f07c.css.gz
public/assets/default.scss.css
public/assets/default.scss.css.gz

application.rb имеет

$ cat config/application.rb 
require File.expand_path('../boot', __FILE__)

# Pick the frameworks you want:
require "active_record/railtie"
require "action_controller/railtie"
require "action_mailer/railtie"
require "active_resource/railtie"
require "sprockets/railtie"
# require "rails/test_unit/railtie"

if defined?(Bundler)
  # If you precompile assets before deploying to production, use this line
  Bundler.require(*Rails.groups(:assets => %w(development test)))
  # If you want your assets lazily compiled in production, use this line
  # Bundler.require(:default, :assets, Rails.env)
end

module Linker
  class Application < Rails::Application
    config.encoding = "utf-8"
    config.filter_parameters += [:password]
    config.assets.enabled = true
    config.assets.initialize_on_precompile = false # For Heroku
    config.assets.version = '1.0'
  end
end

config/environments/production имеет:

$ cat config/environments/production.rb 
Linker::Application.configure do
  config.consider_all_requests_local       = false
  config.action_controller.perform_caching = true
  config.assets.precompile += ['default.scss.css','main.css', 'jquery-ui-1.8.22.custom.css']
  config.serve_static_assets = false
  config.assets.compress = true
  config.assets.compile = false
  config.assets.digest = true
  config.log_level = :debug
  config.i18n.fallbacks = true
  config.active_support.deprecation = :notify
end

Кажется, что это происходит для всех активов, например

Started GET "/assets/default.scss-1a27c22229b7b522066181f27af4f07c.css" for 127.0.0.1 at 2014-02-23 10:24:47 -0500
ActionController::RoutingError (No route matches [GET] "/assets/default.scss-1a27c22229b7b522066181f27af4f07c.css"):
Started GET "/assets/main-6864687b4114a1c316e444bd90f233ff.css" for 127.0.0.1 at 2014-02-23 10:24:47 -0500
ActionController::RoutingError (No route matches [GET] "/assets/main-6864687b4114a1c316e444bd90f233ff.css"):
Started GET "/assets/jquery-ui-1.8.22.custom-24319b4b1218846a3fe22a0479ae98b4.css" for 127.0.0.1 at 2014-02-23 10:24:47 -0500
ActionController::RoutingError (No route matches [GET] "/assets/jquery-ui-1.8.22.custom-24319b4b1218846a3fe22a0479ae98b4.css"):
Started GET "/assets/application-fc1d492d730f2a45581a40eac4607db8.js" for 127.0.0.1 at 2014-02-23 10:24:47 -0500
ActionController::RoutingError (No route matches [GET] "/assets/application-fc1d492d730f2a45581a40eac4607db8.js"):
Started GET "/images/link.ico" for 127.0.0.1 at 2014-02-23 10:24:48 -0500
ActionController::RoutingError (No route matches [GET] "/images/link.ico"):
29
задан 13.05.2020, 05:15

2 ответа

В Rails 4 вы можете получить их для показа в рабочем режиме (локально), передав переменную окружения:

RAILS_SERVE_STATIC_FILES=true rails server -e production

Это должно работать, пока у вас есть это строка в /config/environments/production.rb:

config.serve_static_files = ENV ['RAILS_SERVE_STATIC_FILES']. присутствует?

9
ответ дан 13.05.2020, 05:15
  • 1
    gcc-ansi эквивалентен ' gcc-std=c89'; если that' s, что Вы хотите, хорошо, но если Вы предпочитаете C99, используйте '-std=c99'. – Jonathan Leffler 05.10.2019, 13:06

Когда вы делаете rake assets:precompile, ваши активы попадают в публичный каталог. Посмотрите, можете ли вы найти эти файлы в public/assets/

. Вы должны увидеть что-то вроде этого:

I, [2014-02-23T20:06:21.853314 #26915]  INFO -- : Writing app_root/public/assets/application-ecd8636fc80ea2b712039c4abc365da9.css
4
ответ дан 13.05.2020, 05:16
  • 1
    Я добавил решение получить заполнение клавишей Tab, работающее к Вашему ответу вместо того, чтобы создать новый, поскольку информация в Вашем ответе намного лучше. Не стесняйтесь удалять его, если Вам нравится, и I' ll создают новый ответ. Аплодисменты – Josh Smeaton 28.11.2019, 09:07
  • 2
    недавно записанное имя файла и имя файла, которое требуют соответствие? – Lenin Raj Rajasekaran 13.05.2020, 05:16
  • 3
    Я добавил более вывод от общественности/активов в вопросе. – Michael Durrant 13.05.2020, 05:16
  • 4
    Вы говорите, что файл существует, и Ваш веб-сервер не представляет его? Проблема с Вашим веб-сервером. Не направляющие. Попытайтесь посетить тот URL вручную - app/assets/application....css – Lenin Raj Rajasekaran 13.05.2020, 05:17
  • 5
    +1 Спасибо, Это, кажется, пишет в общественность/активы, по крайней мере, that' s, где палец распечатал файлы. – Michael Durrant 13.05.2020, 05:17
  • 6
    когда Вы предварительно компилируете, в какой каталог это пишет? – Lenin Raj Rajasekaran 13.05.2020, 05:18

Теги

Похожие вопросы