Some warnings and errors appears today, or at least I only just noticed them.
Firstly I forget to load guard without bundle exec and this makes me a bad person.
Apparently I might have more than one version of rspec-expectations and rb-notify installed and I should probably clean them up.
So this might be the case, oh actually. I see the problem. I have a project that has two branches, master and upgrade/rails51. I’m using RVM but each branch has a different .ruby-gemset because of course Rails 5.1 is an upgrade and will have multiple dependencies that are all upgraded too. I must remember to switch RVM environments when flipping branches.
Robs-iMac:core roblacey$ guard
Warning: you have a Gemfile, but you're not using bundler or RUBYGEMS_GEMDEPS
09:36:26 - INFO - Guard here! It looks like your project has a Gemfile, yet you are running
> [#] `guard` outside of Bundler. If this is your intent, feel free to ignore this
> [#] message. Otherwise, consider using `bundle exec guard` to ensure your
> [#] dependencies are loaded correctly.
> [#] (You can run `guard` with --no-bundler-warning to get rid of this message.)
WARN: Unresolved specs during Gem::Specification.reset:
rb-inotify (~> 0.9, >= 0.9.7)
rspec-expectations (~> 3.8.0)
WARN: Clearing out unresolved specs.
Oh how annoying, just trying to deploy a quick fix for a client.
DEBUG[f3c03d7b] Found old RVM 1.29.4 - updating.
DEBUG[f3c03d7b] Downloading https://get.rvm.io
DEBUG[f3c03d7b] [32mDownloading https://raw.githubusercontent.com/rvm/rvm/master/binscripts/rvm-installer.asc[0m
DEBUG[f3c03d7b] [32mVerifying /home/rails/.rvm/archives/rvm-installer.asc[0m
DEBUG[f3c03d7b] Signature made Sun 30 Dec 2018 10:44:46 UTC using RSA key ID 39499BDB
DEBUG[f3c03d7b] Can't check signature: public key not found
DEBUG[f3c03d7b] [31mWarning, RVM 1.26.0 introduces signed releases and automated check of signatures when GPG software found. Assuming you trust Michal Papis import the mpapis public key (downloading the signatures).
DEBUG[f3c03d7b] GPG signature verification failed for '/home/rails/.rvm/archives/rvm-installer' - 'https://raw.githubusercontent.com/rvm/rvm/master/binscripts/rvm-installer.asc'! Try to install GPG v2 and then fetch the public key:
DEBUG[f3c03d7b] gpg2 --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3
DEBUG[f3c03d7b] or if it fails:
DEBUG[f3c03d7b] command curl -sSL https://rvm.io/mpapis.asc | gpg --import -
DEBUG[f3c03d7b] the key can be compared with:
DEBUG[f3c03d7b] NOTE: GPG version 2.1.17 have a bug which cause failures during fetching keys from remote server. Please downgrade or upgrade to newer version (if available) or use the second method described above.
DEBUG[f3c03d7b] /home/rails/.rvm/scripts/functions/cli: line 238: return: _ret: numeric argument required
Seems there is a bug in GPG when fetching remote keys. Solution for this Ubuntu server was to just install gnupg2 and install the key again.
rails@fashion1-002:~$ sudo apt-get install gnupg2
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following extra packages will be installed:
gnupg-agent libassuan0 libksba8 libpth20 pinentry-gtk2
gnupg-doc xloadimage pinentry-doc
The following NEW packages will be installed
gnupg-agent gnupg2 libassuan0 libksba8 libpth20 pinentry-gtk2
0 to upgrade, 6 to newly install, 0 to remove and 177 not to upgrade.
Need to get 1,622 kB of archives.
After this operation, 4,115 kB of additional disk space will be used.
Do you want to continue [Y/n]? Y
Get:1 http://archive.ubuntu.com/ubuntu/ precise/main libassuan0 i386 2.0.2-1ubuntu1 [34.2 kB]
Get:2 http://archive.ubuntu.com/ubuntu/ precise-updates/main libksba8 i386 1.2.0-2ubuntu0.2 [107 kB]
Get:3 http://archive.ubuntu.com/ubuntu/ precise/main libpth20 i386 2.0.7-16ubuntu3 [50.1 kB]
Get:4 http://archive.ubuntu.com/ubuntu/ precise/main pinentry-gtk2 i386 0.8.1-1ubuntu1 [51.4 kB]
Get:5 http://archive.ubuntu.com/ubuntu/ precise-updates/main gnupg-agent i386 2.0.17-2ubuntu2.12.04.6 [298 kB]
Get:6 http://archive.ubuntu.com/ubuntu/ precise-updates/main gnupg2 i386 2.0.17-2ubuntu2.12.04.6 [1,082 kB]
Fetched 1,622 kB in 0s (9,323 kB/s)
Selecting previously unselected package libassuan0.
(Reading database ... 101031 files and directories currently installed.)
Unpacking libassuan0 (from .../libassuan0_2.0.2-1ubuntu1_i386.deb) ...
Selecting previously unselected package libksba8.
Unpacking libksba8 (from .../libksba8_1.2.0-2ubuntu0.2_i386.deb) ...
Selecting previously unselected package libpth20.
Unpacking libpth20 (from .../libpth20_2.0.7-16ubuntu3_i386.deb) ...
Selecting previously unselected package pinentry-gtk2.
Unpacking pinentry-gtk2 (from .../pinentry-gtk2_0.8.1-1ubuntu1_i386.deb) ...
Selecting previously unselected package gnupg-agent.
Unpacking gnupg-agent (from .../gnupg-agent_2.0.17-2ubuntu2.12.04.6_i386.deb) ...
Selecting previously unselected package gnupg2.
Unpacking gnupg2 (from .../gnupg2_2.0.17-2ubuntu2.12.04.6_i386.deb) ...
Processing triggers for man-db ...
Setting up libassuan0 (2.0.2-1ubuntu1) ...
Setting up libksba8 (1.2.0-2ubuntu0.2) ...
Setting up libpth20 (2.0.7-16ubuntu3) ...
Setting up pinentry-gtk2 (0.8.1-1ubuntu1) ...
Setting up gnupg-agent (2.0.17-2ubuntu2.12.04.6) ...
Setting up gnupg2 (2.0.17-2ubuntu2.12.04.6) ...
Processing triggers for libc-bin ...
ldconfig deferred processing now taking place
rails@fashion1-002:~$ gpg2 --recv-keys 7D2BAF1CF37B13E2069D6956105BD0E739499BDB
gpg: requesting key 39499BDB from hkp server keys.gnupg.net
gpg: key 39499BDB: public key "Piotr Kuczynski <email@example.com>" imported
gpg: no ultimately trusted keys found
gpg: Total number processed: 1
gpg: imported: 1 (RSA: 1)
Finally getting to upgrading to Rails 5.1 and there are lots of cases where we use before_* callbacks to block behaviour, most often in before_destroy to prevent a record being deleted when some conditions are met / not met. Previously Rails 5.1 allowed you to just return false in a callback to halt the callback chain. Now you must use throw(:abort).
The behaviour change was turned off by default in Rails 5.0
So you can implement the change sooner by changing that setting in an initializer.
class Thing < ApplicationRecord
I thought initially this would result in having to cope with exceptions raised from throwing that abort rather than say checking if object.destroy returned false. However, it seems it’s just a clarification of behaviour to avoid accidental blocking.
2.3.0 :006 > Thing.create.persisted?
2.3.0 :007 > reload!
2.3.0 :008 > Thing.create.persisted?
SQL (0.3ms) INSERT INTO `things` (`created_at`, `updated_at`) VALUES ('2019-01-17 08:38:24', '2019-01-17 08:38:24')
2.3.0 :009 > Thing.last.destroy
Thing Load (0.3ms) SELECT `things`.* FROM `things` ORDER BY `things`.`id` DESC LIMIT 1
2.3.0 :010 > reload!
2.3.0 :011 > Thing.create.persisted?
SQL (0.2ms) INSERT INTO `things` (`created_at`, `updated_at`) VALUES ('2019-01-17 08:39:29', '2019-01-17 08:39:29')
2.3.0 :010 > reload!
2.3.0 :014 > Thing.last.destroy
Thing Load (0.1ms) SELECT `things`.* FROM `things` ORDER BY `things`.`id` DESC LIMIT 1
SQL (0.2ms) DELETE FROM `things` WHERE `things`.`id` = 2
=> #<Thing id: 2, created_at: "2019-01-17 08:39:29", updated_at: "2019-01-17 08:39:29">