rails-new icon indicating copy to clipboard operation
rails-new copied to clipboard

[proposal] Add node and yarn installation logic to dockerfile

Open onshi opened this issue 1 year ago • 9 comments

This PR addresses issue #22

Currently our Dockerfile image doesn't have node and yarn binaries which results in errors when using --js or --css switches.

This PR adds logic for downloading node 22.7.0 binary and installing yarn 1.22.22 to our dockerfiles. It also bumps default ruby to 3.3.5 and default rails to 7.2.1

How this was tested?

> cargo build
> ./target/debug/rails-new main --js esbuild --css tailwind

>  docker run -it --rm -v $(pwd)/main:/rails -w /rails -p 3000:3000 -e BINDING=0.0.0.0 rails-new-3.3.5-7.2.1 /bin/bash -c "bundle install && ./bin/dev"

> visited http://localhost:3000 and confirmed that page is live

> docker run -it --rm rails-new-3.3.5-7.2.1 bash

root@ac7b091459cb:/# ruby --version
ruby 3.3.5 (2024-09-03 revision ef084cc8f4) [x86_64-linux]
root@ac7b091459cb:/# rails --version
Rails 7.2.1
root@ac7b091459cb:/#  node --version
v22.7.0
root@ac7b091459cb:/#  yarn --version
1.22.22

@rafaelfranca, @excid3 let me know what do you think, I'm open to rewritting this PR to your prefered approach

onshi avatar Aug 06 '24 08:08 onshi

Do we need to care about different node and yarn versions given we are just creating the application with those Dockerfiles? I think we should just hardcoded a single version of it.

rafaelfranca avatar Aug 14 '24 15:08 rafaelfranca

Sure, this also makes sense. I'll redo it later today

onshi avatar Aug 14 '24 17:08 onshi

Next round of changes ready for review

onshi avatar Aug 15 '24 17:08 onshi

Hey @onshi, I'm getting the following on macOS Sonoma 14.6.1.

± ./target/debug/rails-new main --js esbuild --css tailwind
[+] Building 0.7s (6/7) docker:desktop-linux
=> [internal] load build definition from Dockerfile 0.0s
=> => transferring dockerfile: 727B 0.0s
=> [internal] load metadata for docker.io/library/ruby:3.3.4 0.5s
=> [internal] load .dockerignore 0.0s
=> => transferring context: 2B 0.0s
=> [1/4] FROM docker.io/library/ruby:3.3.4@sha256:d4233f4242ea25346f157709bb8417c615e7478468e2699c8 0.0s
=> CACHED [2/4] RUN curl -fsSL https://nodejs.org/dist/v22.6.0/node-v22.6.0-linux-x64.tar.gz 0.0s
=> ERROR [3/4] RUN npm install -g [email protected] 0.1s

    [3/4] RUN npm install -g [email protected]:
    0.107 rosetta error: failed to open elf at /lib64/ld-linux-x86-64.so.2
    0.107 Trace/breakpoint trap

Dockerfile:14

Could this be an issue just on my machine?

nkruk avatar Aug 25 '24 15:08 nkruk

Hey @nkruk,

oh boy I think rosetta error would indicate that you're using arm processor? I currently have only Intel x86 based computers so I didn't test my changes on this architecture ;/

Can you let me know if running

softwareupdate --install-rosetta

changes anything for you?

If it doesn't I can try to rewrite our Dockerfiles to install node using different approach.

Cheers!

onshi avatar Aug 26 '24 02:08 onshi

Yes @onshi, I'm running an M2 Pro and had already ran softwareupdate --install-rosetta before. I get:

Install of Rosetta 2 finished successfully

But same output.

nkruk avatar Aug 26 '24 13:08 nkruk

Hey @nkruk,

I see. I rewrote node installation logic in our Dockerfiles to use apt-get instead of downloading prebuilt binaries, do you mind taking another shot at this and letting me know if it works now for you?

Cheers!

onshi avatar Aug 26 '24 14:08 onshi

Hey @onshi: worked like a charm! Hope it gets merged soon. Thanks!

nkruk avatar Aug 26 '24 15:08 nkruk

@onshi it worked fine for me as well. Thanks!

betogrun avatar Aug 31 '24 17:08 betogrun

Any holdback on release of this? ❤️

NielsKSchjoedt avatar Oct 20 '24 12:10 NielsKSchjoedt

@onshi would you mind giving a tip on how I can run your fork?

NielsKSchjoedt avatar Oct 25 '24 07:10 NielsKSchjoedt

@rafaelfranca you the only maintainer here or?

NielsKSchjoedt avatar Oct 25 '24 07:10 NielsKSchjoedt

@onshi would you mind giving a tip on how I can run your fork?

@NielsKSchjoedt sure, I'm assuming you've rust and cargo installed. This way you can just point cargo to install from my fork

cargo install --verbose --git https://github.com/onshi/rails-new --branch issues_22

binary will be installed in your $HOME/.cargo/bin directory. Let me know if you would need any more help with this

cheers!

onshi avatar Oct 25 '24 14:10 onshi

update:

last commit bumped default ruby to 3.3.6 and default rails to 8.0.0

tested with

./target/debug/rails-new main --js esbuild --css tailwind
 docker run -it --rm -v $(pwd)/main:/rails -w /rails -p 3000:3000 -e BINDING=0.0.0.0 rails-new-3.3.6-8.0.0 /bin/bash -c "bundle install && ./bin/dev"
docker run -it --rm -v $(pwd)/main:/rails -w /rails -p 3000:3000 -e BINDING=0.0.0.0 rails-new-3.3.6-8.0.0 /bin/bash

root@b9f3d4a1f2d4:/rails# ruby --version
ruby 3.3.6 (2024-11-05 revision 75015d4c1f) [x86_64-linux]
root@b9f3d4a1f2d4:/rails# rails --version
Rails 8.0.0
root@b9f3d4a1f2d4:/rails# node --version
v22.11.0
root@b9f3d4a1f2d4:/rails# yarn --version
1.22.22
open http://localhost:3000

obraz

onshi avatar Nov 11 '24 12:11 onshi

This appears to have been merged, even though this ticket is still open. When I run rails-new to create a Rails app in a devcontainer and open the devcontainer then I see

vscode ➜ /workspaces/dummy2_project (main) $ npx -v 10.9.2 vscode ➜ /workspaces/dummy2_project (main) $ yarn -v 1.22.22 vscode ➜ /workspaces/dummy2_project (main) $ node -v v22.13.0

So the npx, yarn and node part of things appears to be working.

But that then leads to the next problem which is that yarn build:css does not work, and hence bin\dev will fail. I'll investigate a bit more to identify the problem and raise a separate ticket

JohnSmall avatar Jan 14 '25 06:01 JohnSmall

This appears to have been merged, even though this ticket is still open. When I run rails-new to create a Rails app in a devcontainer and open the devcontainer then I see

vscode ➜ /workspaces/dummy2_project (main) $ npx -v 10.9.2 vscode ➜ /workspaces/dummy2_project (main) $ yarn -v 1.22.22 vscode ➜ /workspaces/dummy2_project (main) $ node -v v22.13.0

So the npx, yarn and node part of things appears to be working.

But that then leads to the next problem which is that yarn build:css does not work, and hence bin\dev will fail. I'll investigate a bit more to identify the problem and raise a separate ticket

hey @JohnSmall,

do you mind posting steps to reproduce your problem?

From what I understood you're talking about devcontainer images/containers, which are different thing from what we're using here. Dockerfiles created here are only used to generate new rails project, we dont use them to run actual dev environment.

Here is how I tried to simulate your flow, but I can be wrong here:

from plain - "non devcontainer" terminal I ran

./target/debug/rails-new main --js esbuild --css tailwind --devcontainer

to generate fresh project

Then in vscode I created devcontainer environment using config from main/.devcontainer directory

Then I spun devcontainer terminal in vscode and ran your commands

vscode ➜ /workspaces/main (main) $ npx -v
10.9.2
vscode ➜ /workspaces/main (main) $  yarn -v
1.22.22
vscode ➜ /workspaces/main (main) $ node -v
v22.13.0
vscode ➜ /workspaces/main (main) $ yarn build:css
yarn run v1.22.22
$ tailwindcss -i ./app/assets/stylesheets/application.tailwind.css -o ./app/assets/builds/application.css --minify

Rebuilding...

Done in 267ms.
Done in 2.08s.
vscode ➜ /workspaces/main (main) $ ruby --version
ruby 3.3.6 (2024-11-05 revision 75015d4c1f) [x86_64-linux]

after running bin/dev in terminal session from above I got working app connected to localhost:3000

Cheers, and let me know if I can help you further

onshi avatar Jan 14 '25 16:01 onshi