$ rails new my-i8n --webpack
Gemfile
gem 'i18n-js'
Câu hỏi | Trả lời | |
---|---|---|
Chương trình đào tạo lớp 2501 bắt đầu từ ngày nào? | Chương trình bắt đầu từ ngày 10/9/2025 tại Trường Đào tạo và Phát triển Nguồn nhân lực VietinBank. | |
Chương trình gồm bao nhiêu giai đoạn? | Chương trình gồm 4 giai đoạn: Khởi động – Trải nghiệm – Ứng dụng – Tổng kết. | |
Mỗi giai đoạn gồm những hoạt động gì? | Giai đoạn Khởi động: Elearning & đọc sách; Trải nghiệm: học tập trung, coaching, workshop; Ứng dụng: thử thách thực tiễn; Tổng kết: báo cáo & tốt nghiệp. | |
Tôi cần hoàn thành những gì để đủ điều kiện tốt nghiệp? | Hoàn thành đầy đủ Elearning, tham gia đầy đủ các buổi học, nộp bài tập đúng hạn, thực hiện ứng dụng sau đào tạo và tham gia tổng kết. | |
Tôi có thể xem tổng thể khung chương trình ở đâu? | Bạn có thể xem tại file 'Tờ trình khung chương trình' hoặc hỏi chatbot: 'Cho tôi xem khung chương trình lớp 2501'. | |
Thời gian đọc sách diễn ra trong bao lâu? | 30 ngày liên tục, mỗi ngày một nội dung, có hướng dẫn chi tiết trong file đọc sách. | |
Sách bắt buộc là gì? Tôi cần mua không? | Có 2 cuốn bắt buộc: 'Lãn |
{"v":"5.12.2","fr":25,"ip":0,"op":775,"w":1080,"h":1920,"nm":"_main","ddd":0,"assets":[{"id":"image_0","w":10,"h":10,"u":"","p":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAYAAACNMs+9AAAACXBIWXMAAAABAAAAAQBPJcTWAAAAJHpUWHRDcmVhdG9yAAAImXNMyU9KVXBMK0ktUnBNS0tNLikGAEF6Bs5qehXFAAAAo0lEQVQYlXWQwY7EIAxDn0Ogvfb/P66/gQKFOYxgZne1viSKbMeJ7vuefEESc07mfI9X9dYakpAEwBhjC8zsQ8w5b7c55xaYGWZGRCAJNzN67/TefxCe56G1tk08Iqi1UmsFoJRCSonWGhHBdV1v4nIwMySRUtr9yioJd3fO82RlTSkhiZwzx3Fswb7a3fdBYwwkUUr5ZFyK9Ya17jfsz+QfvADFqUMsmAIupgAAAABJRU5ErkJggg==","e":1},{"id":"image_1","w":10,"h":10,"u":"","p":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAYAAACNMs+9AAAACXBIWXMAAAABAAAAAQBPJcTWAAAAJHpUWHRDcmVhdG9yAAAImXNMyU9KVXBMK0ktUnBNS0tNLikGAEF6Bs5qehXFAAAAo0lEQVQYlXWQwY7EIAxDn0Ogvfb/P66/gQKFOYxgZne1viSKbMeJ7vuefEESc07mfI9X9dYakpAEwBhjC8zsQ8w5b7c55xaYGWZGRCAJNzN67/TefxCe56G1tk08Iqi1UmsFoJRCSonWGhHBdV1v4nIwMySRUtr9yioJd3fO82RlTSkhiZwzx3Fswb7a3fdBYwwkUUr5ZFyK9Ya17jfsz+QfvADFqUMsmAIupgAAAABJRU5ErkJggg==","e":1},{"id":"image_2" |
{"nm":"1_01","ddd":1,"h":1920,"w":1080,"meta":{"g":"@lottiefiles/toolkit-js 0.67.2","tc":"#171717"},"layers":[{"ty":3,"nm":"Null 1","sr":1,"st":0,"op":2645,"ip":0,"ln":"481","ddd":1,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[0,0,0]},"s":{"a":0,"k":[100,100]},"p":{"a":1,"k":[{"o":{"x":0,"y":0},"i":{"x":0,"y":1},"s":[7351,960,3642],"t":0,"ti":[1135.167,0,0],"to":[-1135.167,0,0]},{"s":[540,960,3642],"t":105.999,"ti":[1135.167,0,0],"to":[-1135.167,0,0]}],"x":"var $bm_rt;\n$bm_rt = wiggle(0.1, 100);"},"sa":{"a":0,"k":0},"o":{"a":0,"k":100},"rx":{"a":1,"k":[{"o":{"x":0.383,"y":0},"i":{"x":0,"y":1},"s":[0],"t":0},{"s":[8],"t":105.999}]},"ry":{"a":1,"k":[{"o":{"x":0.383,"y":0},"i":{"x":0,"y":1},"s":[0],"t":0},{"s":[360],"t":105.999}]},"rz":{"a":1,"k":[{"o":{"x":0.383,"y":0},"i":{"x":0,"y":1},"s":[0],"t":0},{"s":[-3],"t":105.999}]},"or":{"a":0,"k":[0,0,0]}},"ind":1},{"ty":3,"nm":"Target_Orbit_Cam","sr":1,"st":0,"op":2645,"ip":0,"ln":"482","ddd":1,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100 |
# FOR BUSY JOBS | |
# take the process_id from the /busy page in sidekiq and kill the longest running one. | |
workers = Sidekiq::Workers.new | |
long_process_id = 'integration.3:4:71111aaa111' # Eg: 'integration.3:4:71d1d7f4ef5a' | |
workers.each do |process_id, thread_id, work| | |
process = Sidekiq::Process.new('identity' => process_id) | |
process.stop! if process_id == long_process_id | |
end | |
# FOR SCHEDULED JOBS |
ruby '2.7.1' | |
gem 'rails', github: 'rails/rails' | |
gem 'tzinfo-data', '>= 1.2016.7' # Don't rely on OSX/Linux timezone data | |
# Action Text | |
gem 'actiontext', github: 'basecamp/actiontext', ref: 'okra' | |
gem 'okra', github: 'basecamp/okra' | |
# Drivers |
!function(t,e){"object"==typeof module&&"object"==typeof module.exports?module.exports=t.document?e(t,!0):function(t){if(!t.document)throw new Error("jQuery requires a window with a document");return e(t)}:e(t)}("undefined"!=typeof window?window:this,function(f,t){function e(t,e){return e.toUpperCase()}var i=[],c=i.slice,g=i.concat,a=i.push,n=i.indexOf,s={},o=s.toString,m=s.hasOwnProperty,v={},_=f.document,r="2.1.4",C=function(t,e){return new C.fn.init(t,e)},l=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,h=/^-ms-/,u=/-([\da-z])/gi;function d(t){var e="length"in t&&t.length,i=C.type(t);return"function"!==i&&!C.isWindow(t)&&(!(1!==t.nodeType||!e)||("array"===i||0===e||"number"==typeof e&&0<e&&e-1 in t))}C.fn=C.prototype={jquery:r,constructor:C,selector:"",length:0,toArray:function(){return c.call(this)},get:function(t){return null!=t?t<0?this[t+this.length]:this[t]:c.call(this)},pushStack:function(t){var e=C.merge(this.constructor(),t);return e.prevObject=this,e.context=this.context,e},each:function(t,e){return C.each( |
$ rails new my-i8n --webpack
Gemfile
gem 'i18n-js'
Web fonts are pretty much all the rage. Using a CDN for font libraries, like TypeKit or Google Fonts, will be a great solution for many projects. For others, this is not an option. Especially when you are creating a custom icon library for your project.
Rails and the asset pipeline are great tools, but Rails has yet to get caught up in the custom web font craze.
As with all things Rails, there is more then one way to skin this cat. There is the recommended way, and then there are the other ways.
Here I will show how to update your Rails project so that you can use the asset pipeline appropriately and resource your files using the common Rails convention.
brew tap homebrew/versions | |
brew install v8-315 | |
gem install libv8 -v '3.16.14.13' -- --with-system-v8 | |
gem install therubyracer -- --with-v8-dir=/usr/local/opt/[email protected] | |
bundle install |