5

NameError: undefined method ‘parse’ for class ‘NilClass’ when doing Time.zone.pa...

 3 years ago
source link: https://mensfeld.pl/2019/10/nameerror-undefined-method-parse-for-class-nilclass-when-doing-time-zone-parse/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client
4718146022_d01fd346da_k-766x513.jpg

NameError: undefined method ‘parse’ for class ‘NilClass’ when doing Time.zone.parse

If you get following error when trying to parse time:

Time.zone.parse('2019-01-01 11:11:11')
Traceback (most recent call last):
16: from /bundler/friendly_errors.rb:124:in `with_friendly_errors'
15: from /bundle:30:in `block in <top (required)>'
14: from /bundler/cli.rb:18:in `start'
13: from /bundler/vendor/thor/lib/thor/base.rb:466:in `start'
12: from /bundler/cli.rb:27:in `dispatch'
11: from /bundler/vendor/thor/lib/thor.rb:387:in `dispatch'
10: from /bundler/vendor/thor/lib/thor/invocation.rb:126:in `invoke_command'
9: from /bundler/vendor/thor/lib/thor/command.rb:27:in `run'
8: from /bundler/cli.rb:465:in `exec'
7: from /bundler/cli/exec.rb:28:in `run'
6: from /bundler/cli/exec.rb:74:in `kernel_load'
5: from /bundler/cli/exec.rb:74:in `load'
4: from bin/irb:23:in `<top (required)>'
3: from bin/irb:23:in `load'
2: from lib/ruby/gems/2.6.0/gems/irb-1.0.0/exe/irb:11:in `<top (required)>'
1: from (irb):5
NoMethodError (undefined method `parse' for nil:NilClass)

it means you’ve forgotten to set the timezone:

Time.zone = 'UTC'

Also, keep in mind, that each time you spin up a new thread, it won’t have a timezone defined (outside of Rails):

Time.zone = 'UTC'
Time.zone.parse('2019-01-01 11:11:11') # works
Thread.abort_on_exception = true
# fails
Thread.new do
Time.zone.parse('2019-01-01 11:11:11')
end
# NoMethodError: undefined method `parse' for nil:NilClass

In order to fix that, you need to set the time zone in each of your newly created threads:

Time.zone = 'UTC'
Time.zone.parse('2019-01-01 11:11:11') # works
Thread.abort_on_exception = true
# works
Thread.new do
Time.zone = 'UTC'
Time.zone.parse('2019-01-01 11:11:11')
end

Cover photo by Alex The Shutter on Attribution-NonCommercial 2.0 Generic (CC BY-NC 2.0) license.


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK