serviceworker-rails gem 未与 solidus 电子商务集成 gem
serviceworker-rails gem not intergrating with solidus eCommerce gem
我正在使用 serviceworker-rails gem 使我的电子商务应用程序成为渐进式 Web 应用程序。这是项目中的 gem 文件片段;
# progressive web application gem
gem 'serviceworker-rails'
# eCommerce gems
gem 'solidus'
gem 'solidus_auth_devise'
#base gems
gem 'rails', '~> 5.2.0'
ruby '2.5.1'
serviceworker-rails gem 依次生成使应用程序成为渐进式 Web 应用程序所需的清单文件;
app/assets/javascripts/serviceworker.js.erb
var CACHE_VERSION = 'v1';
var CACHE_NAME = CACHE_VERSION + ':sw-cache-';
function onInstall(event) {
console.log('[Serviceworker]', "Installing!", event);
event.waitUntil(
caches.open(CACHE_NAME).then(function prefill(cache) {
return cache.addAll([
// make sure serviceworker.js is not required by application.js
// if you want to reference application.js from here
'<%#= asset_path "application.js" %>',
'<%= asset_path "application.css" %>',
'/offline.html',
]);
})
);
}
function onActivate(event) {
console.log('[Serviceworker]', "Activating!", event);
event.waitUntil(
caches.keys().then(function(cacheNames) {
return Promise.all(
cacheNames.filter(function(cacheName) {
// Return true if you want to remove this cache,
// but remember that caches are shared across
// the whole origin
return cacheName.indexOf(CACHE_VERSION) !== 0;
}).map(function(cacheName) {
return caches.delete(cacheName);
})
);
})
);
}
// Borrowed from https://github.com/TalAter/UpUp
function onFetch(event) {
event.respondWith(
// try to return untouched request from network first
fetch(event.request).catch(function() {
// if it fails, try to return request from the cache
return caches.match(event.request).then(function(response) {
if (response) {
return response;
}
// if not found in cache, return default offline content for navigate requests
if (event.request.mode === 'navigate' ||
(event.request.method === 'GET' && event.request.headers.get('accept').includes('text/html'))) {
console.log('[Serviceworker]', "Fetching offline content", event);
return caches.match('/offline.html');
}
})
})
);
}
self.addEventListener('install', onInstall);
self.addEventListener('activate', onActivate);
self.addEventListener('fetch', onFetch);
app/assets/javascripts/serviceworker-companion.js
if (navigator.serviceWorker) {
navigator.serviceWorker.register('/serviceworker.js', { scope: './' })
.then(function(reg) {
console.log('[Companion]', 'Service worker registered!');
});
}
应用程序没有出现任何错误;只是我碰巧注意到服务人员没有被注册。这是正在使用的清单;
app/assets/javascripts/manifest.json.erb
{
"name": "My Progressive Rails App",
"short_name": "Progressive",
"start_url": "/"
}
...最后;
app/views/layouts/application.html.erb
<!DOCTYPE html>
<html>
<head>
<title>Istore</title>
<%= csrf_meta_tags %>
<%= csp_meta_tag %>
<%= stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track': 'reload' %>
<%= javascript_include_tag 'application', 'data-turbolinks-track': 'reload' %>
<link rel="manifest" href="/manifest.json" />
<meta name="apple-mobile-web-app-capable" content="yes">
</head>
<body>
<%= yield %>
</body>
</html>
公平地说;我以前用过这个设置,效果很好。当我将它与 solidus_gem 一起使用时,有些东西坏了。迄今为止;我调试问题的努力只是让我专注于一组概率。最强的存在;缺少根指令。
(gem 也不适用于默认的 rails 起始页)
但是在设置自定义根页面时; gem 有效。所以我做了一些猴子修补并将 solidus 的根页面添加到我的项目中,然后附加应用程序路由以包含 solidus 主页。
config/routes.rb
Rails.application.routes.draw do
root to: 'spree/home#index'
mount Spree::Core::Engine, at: '/'
end
这被证明是不成功的。我正在使用 lighthouse 来审核应用程序,错误表示 serviceworker 没有被注册。
我错过了什么?是否超出范围?
我终于让它工作了:)。提供应用程序布局的 gem 是 solidus,但问题是清单在本地应用程序中,其中 solidus 是 gem。
使其对 gem 可见;我从
中删除了标签
app/views/layouts/application.html.erb
然后将它们放入gems布局文件中。您必须将其下载到本地才能进行更改。撰写本文时的布局文件位于
app/views/spree/layouts/
但头部部分包含 _head 部分的渲染
app/views/spree/shared/_head.html.erb
将这些标签放入其中可以更有效地解决问题。
<%= javascript_include_tag "application" %>
<link rel="manifest" href="/manifest.json" />
<meta name="apple-mobile-web-app-capable" content="yes">
我正在使用 serviceworker-rails gem 使我的电子商务应用程序成为渐进式 Web 应用程序。这是项目中的 gem 文件片段;
# progressive web application gem
gem 'serviceworker-rails'
# eCommerce gems
gem 'solidus'
gem 'solidus_auth_devise'
#base gems
gem 'rails', '~> 5.2.0'
ruby '2.5.1'
serviceworker-rails gem 依次生成使应用程序成为渐进式 Web 应用程序所需的清单文件;
app/assets/javascripts/serviceworker.js.erb
var CACHE_VERSION = 'v1';
var CACHE_NAME = CACHE_VERSION + ':sw-cache-';
function onInstall(event) {
console.log('[Serviceworker]', "Installing!", event);
event.waitUntil(
caches.open(CACHE_NAME).then(function prefill(cache) {
return cache.addAll([
// make sure serviceworker.js is not required by application.js
// if you want to reference application.js from here
'<%#= asset_path "application.js" %>',
'<%= asset_path "application.css" %>',
'/offline.html',
]);
})
);
}
function onActivate(event) {
console.log('[Serviceworker]', "Activating!", event);
event.waitUntil(
caches.keys().then(function(cacheNames) {
return Promise.all(
cacheNames.filter(function(cacheName) {
// Return true if you want to remove this cache,
// but remember that caches are shared across
// the whole origin
return cacheName.indexOf(CACHE_VERSION) !== 0;
}).map(function(cacheName) {
return caches.delete(cacheName);
})
);
})
);
}
// Borrowed from https://github.com/TalAter/UpUp
function onFetch(event) {
event.respondWith(
// try to return untouched request from network first
fetch(event.request).catch(function() {
// if it fails, try to return request from the cache
return caches.match(event.request).then(function(response) {
if (response) {
return response;
}
// if not found in cache, return default offline content for navigate requests
if (event.request.mode === 'navigate' ||
(event.request.method === 'GET' && event.request.headers.get('accept').includes('text/html'))) {
console.log('[Serviceworker]', "Fetching offline content", event);
return caches.match('/offline.html');
}
})
})
);
}
self.addEventListener('install', onInstall);
self.addEventListener('activate', onActivate);
self.addEventListener('fetch', onFetch);
app/assets/javascripts/serviceworker-companion.js
if (navigator.serviceWorker) {
navigator.serviceWorker.register('/serviceworker.js', { scope: './' })
.then(function(reg) {
console.log('[Companion]', 'Service worker registered!');
});
}
应用程序没有出现任何错误;只是我碰巧注意到服务人员没有被注册。这是正在使用的清单;
app/assets/javascripts/manifest.json.erb
{
"name": "My Progressive Rails App",
"short_name": "Progressive",
"start_url": "/"
}
...最后;
app/views/layouts/application.html.erb
<!DOCTYPE html>
<html>
<head>
<title>Istore</title>
<%= csrf_meta_tags %>
<%= csp_meta_tag %>
<%= stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track': 'reload' %>
<%= javascript_include_tag 'application', 'data-turbolinks-track': 'reload' %>
<link rel="manifest" href="/manifest.json" />
<meta name="apple-mobile-web-app-capable" content="yes">
</head>
<body>
<%= yield %>
</body>
</html>
公平地说;我以前用过这个设置,效果很好。当我将它与 solidus_gem 一起使用时,有些东西坏了。迄今为止;我调试问题的努力只是让我专注于一组概率。最强的存在;缺少根指令。
(gem 也不适用于默认的 rails 起始页)
但是在设置自定义根页面时; gem 有效。所以我做了一些猴子修补并将 solidus 的根页面添加到我的项目中,然后附加应用程序路由以包含 solidus 主页。
config/routes.rb
Rails.application.routes.draw do
root to: 'spree/home#index'
mount Spree::Core::Engine, at: '/'
end
这被证明是不成功的。我正在使用 lighthouse 来审核应用程序,错误表示 serviceworker 没有被注册。
我错过了什么?是否超出范围?
我终于让它工作了:)。提供应用程序布局的 gem 是 solidus,但问题是清单在本地应用程序中,其中 solidus 是 gem。
使其对 gem 可见;我从
中删除了标签app/views/layouts/application.html.erb
然后将它们放入gems布局文件中。您必须将其下载到本地才能进行更改。撰写本文时的布局文件位于
app/views/spree/layouts/
但头部部分包含 _head 部分的渲染
app/views/spree/shared/_head.html.erb
将这些标签放入其中可以更有效地解决问题。
<%= javascript_include_tag "application" %>
<link rel="manifest" href="/manifest.json" />
<meta name="apple-mobile-web-app-capable" content="yes">