seek-oss / serverless-haskell

Deploying Haskell applications to AWS Lambda with Serverless
MIT License
215 stars 22 forks source link

sls invoke local hangs forever + errors #143

Closed seanhess closed 4 years ago

seanhess commented 4 years ago

Hey there, I'm excited to try this out! Following the README, I'm unable to get sls invoke local to do anything.

Behavior $ sls invoke local -f mypackage-func

It just sits there. I've tried entering JSON as if it were a prompt and it does nothing.

Expected Behavior I thought it would output the results of Main.handler

Steps to Reproduce

  1. $ stack new mypackage https://raw.githubusercontent.com/seek-oss/serverless-haskell/master/serverless-haskell.hsfiles
  2. Update resolver to lts-16.3
  3. $ npm install
  4. $ stack build
  5. $ sls invoke local -f mypackage-func

I then get the following error

Serverless: Package version mismatch: serverless-haskell installed from NPM: 0.8.11, installed from Stack: 0.12.1. Versions must be in sync to work correctly. Please install matching versions of serverless-haskell from NPM and Stack by either pinning your NPM version to match stack, or adding an extra-dep in your stack.yaml to match the NPM version.

  1. Update package.json to pin serverless-haskell to 0.12.1.
  2. $ sls invoke local -f mypackage-func

... It does nothing. Ctl-C to quit

Other steps

I just tried to follow the Manual instructions, and encountered similar issues. This time it does exit eventually. It looks like the delay was from docker trying to download ghc.

What does this error mean?


  Error --------------------------------------------------

  Error: Error when running Stack: exit code: 1; Preparing to install GHC to an isolated location.
  This will not interfere with any system-level installation.
  Preparing to download ghc-8.8.3 ...
  Already downloaded.
  /Users/seanhess/.stack/programs/x86_64-linux-dkda49f7ca9b244180d3cfb1987cbc9743/ghc-8.8.3.temp/ghc-8.8.3: removeDirectoryRecursive:removeContentsRecursive:removePathRecursive:removeContentsRecursive:removeDirectory: unsatisfied constraints (Directory not empty)
  Stack command: stack --docker --docker-image fpco/stack-build:lts-13.30 --no-nix ls dependencies
      at new ProcessError (/Users/seanhess/Documents/learn/mypackage/node_modules/serverless-haskell/dist/index.js:47:28)
      at ServerlessPlugin.runStack (/Users/seanhess/Documents/learn/mypackage/node_modules/serverless-haskell/dist/index.js:118:19)
      at ServerlessPlugin.runStackOutput (/Users/seanhess/Documents/learn/mypackage/node_modules/serverless-haskell/dist/index.js:123:27)
      at ServerlessPlugin.assertServerlessPackageVersionsMatch (/Users/seanhess/Documents/learn/mypackage/node_modules/serverless-haskell/dist/index.js:164:38)
      at /Users/seanhess/Documents/learn/mypackage/node_modules/serverless-haskell/dist/index.js:230:19
      at Array.forEach (<anonymous>)
      at ServerlessPlugin.buildHandlers (/Users/seanhess/Documents/learn/mypackage/node_modules/serverless-haskell/dist/index.js:214:34)
      at /usr/local/lib/node_modules/serverless/lib/classes/PluginManager.js:476:55
      at tryCatcher (/usr/local/lib/node_modules/serverless/node_modules/bluebird/js/release/util.js:16:23)
      at Object.gotValue (/usr/local/lib/node_modules/serverless/node_modules/bluebird/js/release/reduce.js:168:18)
      at Object.gotAccum (/usr/local/lib/node_modules/serverless/node_modules/bluebird/js/release/reduce.js:155:25)
      at Object.tryCatcher (/usr/local/lib/node_modules/serverless/node_modules/bluebird/js/release/util.js:16:23)
      at Promise._settlePromiseFromHandler (/usr/local/lib/node_modules/serverless/node_modules/bluebird/js/release/promise.js:547:31)
      at Promise._settlePromise (/usr/local/lib/node_modules/serverless/node_modules/bluebird/js/release/promise.js:604:18)
      at Promise._settlePromise0 (/usr/local/lib/node_modules/serverless/node_modules/bluebird/js/release/promise.js:649:10)
      at Promise._settlePromises (/usr/local/lib/node_modules/serverless/node_modules/bluebird/js/release/promise.js:729:18)
      at _drainQueueStep (/usr/local/lib/node_modules/serverless/node_modules/bluebird/js/release/async.js:93:12)
      at _drainQueue (/usr/local/lib/node_modules/serverless/node_modules/bluebird/js/release/async.js:86:9)
      at Async._drainQueues (/usr/local/lib/node_modules/serverless/node_modules/bluebird/js/release/async.js:102:5)
      at Immediate.Async.drainQueues [as _onImmediate] (/usr/local/lib/node_modules/serverless/node_modules/bluebird/js/release/async.js:15:14)
      at processImmediate (internal/timers.js:456:21)
      at process.topLevelDomainCallback (domain.js:137:15)

     For debugging logs, run again after setting the "SLS_DEBUG=*" environment variable.

  Get Support --------------------------------------------
     Docs:          docs.serverless.com
     Bugs:          github.com/serverless/serverless/issues
     Issues:        forum.serverless.com

  Your Environment Information ---------------------------
     Operating System:          darwin
     Node Version:              14.4.0
     Framework Version:         1.74.1
     Plugin Version:            3.6.15
     SDK Version:               2.3.1
     Components Version:        2.31.7

System information

Mac OSX Catalina

sls --version Framework Core: 1.74.1 Plugin: 3.6.15 SDK: 2.3.1 Components: 2.31.7

stack --version Version 2.3.1 x86_64 hpack-0.33.0

seanhess commented 4 years ago

Setting SLS_DEBUG=* gives me tons of output. It was compiling a ton of stuff in docker. It might be helpful to add a note in the guide that the invoke step can take a long time on first run. Is there some way to prepopulate the cache so this step isn't so slow? Having it run with no feedback is confusing.

I'm getting a new error now:

 Error --------------------------------------------------

  Error: ENOENT: no such file or directory, lstat '/Users/seanhess/Documents/learn/mypackage/.stack-work/install/x86_64-linux-dkda49f7ca9b244180d3cfb1987cbc9743/30d55232fa32dfbc12174ca7784b89d7f0eab6caa085f146a98d5510cf61386f/8.8.3/bin/myfunc'
      at Object.lstatSync (fs.js:1026:3)
      at Object.<anonymous> (/usr/local/lib/node_modules/serverless/node_modules/graceful-fs/polyfills.js:308:16)
      at /Users/seanhess/Documents/learn/mypackage/node_modules/graceful-fs/polyfills.js:308:16
      at getStats (/Users/seanhess/Documents/learn/mypackage/node_modules/serverless-haskell/node_modules/fs-extra/lib/copy-sync/copy-sync.js:46:14)
      at startCopy (/Users/seanhess/Documents/learn/mypackage/node_modules/serverless-haskell/node_modules/fs-extra/lib/copy-sync/copy-sync.js:41:10)
      at Object.copySync (/Users/seanhess/Documents/learn/mypackage/node_modules/serverless-haskell/node_modules/fs-extra/lib/copy-sync/copy-sync.js:36:10)
      at /Users/seanhess/Documents/learn/mypackage/node_modules/serverless-haskell/dist/index.js:245:24
      at Array.forEach (<anonymous>)
      at ServerlessPlugin.buildHandlers (/Users/seanhess/Documents/learn/mypackage/node_modules/serverless-haskell/dist/index.js:214:34)
      at /usr/local/lib/node_modules/serverless/lib/classes/PluginManager.js:476:55
  From previous event:
      at PluginManager.invoke (/usr/local/lib/node_modules/serverless/lib/classes/PluginManager.js:476:22)
      at /usr/local/lib/node_modules/serverless/lib/classes/PluginManager.js:511:24
  From previous event:
      at PluginManager.run (/usr/local/lib/node_modules/serverless/lib/classes/PluginManager.js:511:8)
      at /usr/local/lib/node_modules/serverless/lib/Serverless.js:131:33
  From previous event:
      at Serverless.run (/usr/local/lib/node_modules/serverless/lib/Serverless.js:118:74)
      at /usr/local/lib/node_modules/serverless/bin/serverless.js:80:26
      at processImmediate (internal/timers.js:456:21)
      at process.topLevelDomainCallback (domain.js:137:15)
  From previous event:
      at Object.<anonymous> (/usr/local/lib/node_modules/serverless/bin/serverless.js:80:4)
      at Module._compile (internal/modules/cjs/loader.js:1200:30)
      at Object.Module._extensions..js (internal/modules/cjs/loader.js:1220:10)
      at Module.load (internal/modules/cjs/loader.js:1049:32)
      at Function.Module._load (internal/modules/cjs/loader.js:937:14)
      at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:71:12)
      at internal/main/run_main_module.js:17:47

  Get Support --------------------------------------------
     Docs:          docs.serverless.com
     Bugs:          github.com/serverless/serverless/issues
     Issues:        forum.serverless.com

  Your Environment Information ---------------------------
     Operating System:          darwin
     Node Version:              14.4.0
     Framework Version:         1.74.1
     Plugin Version:            3.6.15
     SDK Version:               2.3.1
     Components Version:        2.31.7
dmoverton commented 4 years ago

I've fixed the package mismatch in serverless-haskell.hsfiles.

I tried following your Steps to Reproduce and it worked for me. MacOS 10.15.5

$ sls --version
Framework Core: 1.59.1
Plugin: 3.2.5
SDK: 2.2.1
Components Core: 1.1.2
Components CLI: 1.4.0
 $ stack --version
Version 2.3.1, Git revision de2a7b694f07de7e6cf17f8c92338c16286b2878 (8103 commits) x86_64 hpack-0.33.0

although it did take an hour to build everything.

dmoverton commented 4 years ago

I'm not sure why it's trying to find myfunc instead of mypackage-exe. Did you make any changes to serverless.yml from the template?

seanhess commented 4 years ago

Ok, the problem was that I switched to the manual version when the template version was silently compiling forever. The manual version had some errors (mypackage.mypackage-exe instead of mypackage.func in serverless.yml).

See the above pull request. I added a few steps and fixed that issue.

Thanks so much, I'm excited to play with this more!