Wei Lin Ngo - @Creastery (Praetorian)
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<script lang="ts"> | |
import type { UserView } from '$lib/stubs/auth'; | |
import { getContext, onMount } from 'svelte'; | |
import { goto } from '$app/navigation'; | |
import { getContacts } from '$lib/repositories/contacts'; | |
import { browser } from '$app/environment'; | |
import { CONTACTS_STORE_KEY, USER_STORE_KEY } from '$lib/store-keys'; | |
import type { Writable } from 'svelte/store'; | |
import AddContactButton from '$lib/components/Contacts/AddContact/AddContactButton.svelte'; | |
import { db } from '$lib/surrealdb'; |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
module HashDelegate | |
# Like `delegate :foo, to: :bar` only for hashes instead | |
# of objects. So these are the same: | |
# | |
# def foo | |
# bar[:foo] | |
# end | |
# | |
# hash_delegate :foo, to: :bar |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<script context="module"> | |
import { get, readable } from 'svelte/store' | |
import { createClient, operationStore } from '@urql/svelte' | |
import { browser, dev } from '$app/env' | |
/** | |
* @type {import('@sveltejs/kit').Load} | |
*/ |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
task :generate_engine do | |
# Get name sent from console | |
name = ENV['name'].downcase | |
# Store useful paths | |
engine_path = "engines/#{name}" | |
dummy_path = 'spec/dummy' | |
lib_files_path = 'lib/tasks/files' | |
dummy_relative_path = "#{engine_path}/#{dummy_path}" |
One way to do this is to use bundler to scaffold our gem:
bundler gem my_gem
I prefer to put tasks meant to manage the gem itself in lib/tasks
, and tasks the gem is meant to provide to gem users in lib/my_gem/tasks
.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
begin | |
require "bundler/inline" | |
rescue LoadError => e | |
$stderr.puts "Bundler version 1.10 or later is required. Please update your Bundler" | |
raise e | |
end | |
gemfile(true) do | |
source "https://rubygems.org" |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sidekiq.configure_server do |config| | |
ENV["SIDEKIQ_NAMESPACE"] && config.options[:namespace] = ENV["SIDEKIQ_NAMESPACE"] | |
ENV["SIDEKIQ_CONCURRENCY"] && config.options[:concurrency] = ENV["SIDEKIQ_CONCURRENCY"].to_i | |
ENV["SIDEKIQ_VERBOSE"] && config.options[:verbose] = ENV["SIDEKIQ_VERBOSE"] === 'true' | |
ENV["SIDEKIQ_LOGFILE"] && config.options[:logfile] = ENV["SIDEKIQ_LOGFILE"] | |
ENV["SIDEKIQ_PIDFILE"] && config.options[:pidfile] = ENV["SIDEKIQ_PIDFILE"] | |
config.options[:strict] = true | |
if ENV["SIDEKIQ_QUEUES"] |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Retry count | Retry Time | Total Cumulative Time | Total Cumulative Days | |
---|---|---|---|---|
0 | 0:00:00 | 0:00:00 | 0.0 | |
1 | 0:00:16 | 0:00:16 | 0.0 | |
2 | 0:00:31 | 0:00:47 | 0.0 | |
3 | 0:01:36 | 0:02:23 | 0.0 | |
4 | 0:04:31 | 0:06:54 | 0.0 | |
5 | 0:10:40 | 0:17:34 | 0.0 | |
6 | 0:21:51 | 0:39:25 | 0.0 | |
7 | 0:40:16 | 1:19:41 | 0.1 | |
8 | 1:08:31 | 2:28:12 | 0.1 |
Long story short, Celluloid versions 0.17+ have a memory leak.
The Reason behind this is that completed Celluloid threads are never cleaned up.
We have discovered that our Sidekiq process is leaking memory when we have a lot of tasks that were failed because of exceptions. Unfortunately, having a lot of failed tasks is specific for our application — we do have a lot of small queued jobs to work with social network APIs and other external services.
You can reproduce the problem with this: https://gist.github.com/gazay/3aa78e515ab05cb79f76
NewerOlder