has_post_thumbnail() require the global $post if you aren’t passing an ID to it, so it sounds like you’re calling it in a context where the global $post isn’t available. Personally I don’t like relying on the global $post ever–I pass IDs, etc, whenever I want something so that I know exactly what is being used.
\App\asset_path() is undefined because Sage 10 no longer uses that function. I would recommend using \Roots\asset() instead. This will return an Asset from which you can get a URL (as well as a number of other useful things).