#javascript #ruby-on-rails #node.js #deployment #asset-pipeline
#javascript #ruby-on-rails #node.js #развертывание #конвейер активов
Вопрос:
Rails в производственном режиме обслуживает ресурсы из public/assets
папки, подобной этой:
/assets/application-c3967f04f81628153a30120e3f5b8695.js
и в режиме разработки служит из app/assets
папки, подобной этой
/assets/application.js?body=1
или
/assets/application-c3967f04f81628153a30120e3f5b8695.js
Интересно, как rails это понимает. Поскольку я пытаюсь сделать то же самое в nodejs, я думаю, что один из подходов может быть таким:
var env = process.env.NODE_ENV || 'development';
if ('development' == env) {
app.use(express.static(path.join(config.root, 'app')));
} else if ('production' == env) {
app.use(express.static(path.join(config.root, 'public')));
};
Каковы альтернативы для достижения этого в NodeJS?
Ответ №1:
Отпечаток пальца
То, что вы имеете в виду, известно как дактилоскопия активов
Это способ для Rails определять уникальные URL-адреса ваших ресурсов в производстве, позволяя вам использовать подобные precompilation
для статического обслуживания ваших ресурсов и, следовательно, быстрее
Как описано в документах Rails:
Снятие отпечатков пальцев — это метод, который делает имя файла зависимым от содержимого файла. При изменении содержимого файла имя файла также изменяется. Для содержимого, которое является статическим или редко изменяемым, это обеспечивает простой способ определить, идентичны ли две версии файла, даже на разных серверах или в разные даты развертывания.
—
Помощники пути
Проблема, с которой вы сталкиваетесь, заключается в том, что когда вы используете Rails в разработке, он будет обслуживать ресурсы из app/assets
каталога. Однако, когда вы запускаете приложение в производство, приложение вместо этого будет обслуживать ресурсы из public
каталога
Это проблема, поскольку это означает, что вам придется выполнить некоторую загрузку условного пути, чтобы заставить вещь работать. Способ обойти это — использовать помощников пути к ресурсам
Они работают только с такими препроцессорами, как .erb
, позволяя вам вызывать подобные:
asset_url("your_asset_url")
Это загрузит путь к ресурсам независимо от того, находитесь ли вы в режиме разработки или разработки.
NodeJS
Возможно, вы могли бы получить более полное представление, изучив источник для asset_url
path helper в Rails