M1 Mac에 Ruby 2.7.3을 설치하는 방법

5300 단어 tutorialbashruby
이 게시물은 원래 my website에 게시되었습니다. 더 멋진 콘텐츠를 확인하세요!

M1 Mac에 Ruby 또는 Python을 설치하는 것은 악몽입니다. 나는 이러한 문제로 컴파일러와 Rosetta와 싸우는 데 너무 많은 시간을 허비했기 때문에 많은 두통을 덜어주기 위해 설치 단계를 문서화하고 있습니다1.

왜 2.7.3인가?



첫째, 왜 Ruby 2.7.3이 특별히 필요합니까? Ruby 3.0.0+는 my RVM install instructions post을 사용하여 M1에서 잘 작동합니다.

rvm install 3.0.0


불행히도 내 웹사이트의 호스트GitHub Pagesdependency documentation에 따라 Ruby 2.7.3을 사용합니다. 그리고 2.7.3의 베어 본 설치가 내 M1 시스템에서 폭발합니다.

rvm install 2.7.3


그래서 내 Mac에 2.7.3을 설치하여 내 웹사이트를 로컬로 구축하고 실행하여 새 게시물을 미리 볼 수 있는 방법을 찾아야 했습니다.

해결책



일을 간단하게 유지하기 위해 여기 맨 위에 승리 명령을 넣을 것입니다. 이에 대한 솔루션을 문서화한 @d-lebed GitHub issue 에게 감사드립니다. $(brew --prefix)가 다운로드되는 homebrew 하드코딩 대신 [email protected]를 사용하도록 코드를 약간 수정했습니다.

# Winning script!
brew install [email protected]

export PATH="$(brew --prefix)/opt/[email protected]/bin:$PATH"
export LDFLAGS="-L$(brew --prefix)/opt/[email protected]/lib"
export CPPFLAGS="-I$(brew --prefix)/opt/[email protected]/include"
export PKG_CONFIG_PATH="$(brew --prefix)/opt/[email protected]/lib/pkgconfig"

rvm autolibs disable

export RUBY_CFLAGS=-DUSE_FFI_CLOSURE_ALLOC
export optflags="-Wno-error=implicit-function-declaration"

rvm install 2.7.3 --with-openssl-dir=$(brew --prefix)/opt/[email protected]


이것은 성공적으로 Ruby 2.7.3을 설치했고 웹사이트 저장소의 루트에서 실행할 수 있었습니다bundle install!

문제



나는 원래 모든 문제 해결 단계와 설치 시도를 문서화했지만 내 취향에 비해 너무 길고 난잡해졌습니다. 대신, 내가 만난 몇 가지 오류에 대한 간략한 요약을 제공합니다.

플래그



어느 시점에서 rvm는 내 LDFLAGS에 대해 불평했습니다.

checking whether LDFLAGS is valid... no
configure: error: something wrong with LDFLAGS="-L/usr/local/opt/zlib/lib -L/usr/local/opt/bzip2/lib"


그리고 LDFLAGS="" 앞에 rvm install 2.7.3를 설정하면 컴파일러 누락openssl 라이브러리와 함께 오류가 발생했습니다. 그래서 어떻게 든 LDFLAGS 설정이 필요했지만 Python 및 pyenv 에서 작동하는 방식은 아닙니다.

로제타



몇 가지 GitHub 문제에서 사람들은 Rosetta를 통해 터미널 앱을 열고 this issue comment 과 같은 방식으로 명령을 실행할 것을 권장했습니다. 그러나 Rosetta Terminal과 iTerm 간의 오류 출력에는 차이가 없었습니다. 결국 나는 Rosetta 없이 iTerm을 사용하여 Ruby 2.7.3을 성공적으로 설치했습니다.

사용자 이름 매크로 오류



openssl 라이브러리를 LDFLAGS , CPPFLAGSPKG_CONFIG_PATH 에 추가했을 때 올바른 설치에 가까워졌습니다.

PATH="/usr/local/opt/[email protected]/bin:$PATH" \
LDFLAGS="-L$(brew --prefix)/opt/[email protected]/lib" \
CPPFLAGS="-I$(brew --prefix)/opt/[email protected]/include" \
PKG_CONFIG_PATH="$(brew --prefix)/opt/[email protected]/lib/pkgconfig" \
arch -x86_64 rvm install 2.7.3 -j 1


하지만 일부 누락된rl_username_completion_function 매크로에 대한 오류가 표시되기 시작했습니다.

214 warnings generated.
linking shared-object date_core.bundle
installing default date_core libraries
compiling readline.c
readline.c:1904:37: error: use of undeclared identifier 'username_completion_function'; did you mean 'rl_username_completion_function'?
                                    rl_username_completion_function);
                                    ^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                                    rl_username_completion_function
readline.c:79:42: note: expanded from macro 'rl_username_completion_function'
# define rl_username_completion_function username_completion_function
                                         ^
/opt/homebrew/opt/readline/include/readline/readline.h:485:14: note: 'rl_username_completion_function' declared here
extern char *rl_username_completion_function PARAMS((const char *, int));
             ^
1 error generated.
make[2]: *** [readline.o] Error 1
make[1]: *** [ext/readline/all] Error 2
make: *** [build-ext] Error 2
+__rvm_make:0> return 2


그런 다음 rvm install 2.7.3 error extern char *rl_username_completion_function PARAMS((const char *, int));를 검색하고 일부 GitHub 문제에 권장되는 몇 가지 명령을 시도하여 승리한 명령(위)을 찾았습니다.

다음 단계



최근에 pyenv 를 통해 M1 Mac에 Python 3.7, 3.8 및 3.9를 설치하는 방법을 알아냈으므로 설치 방법에 대한 내 게시물을 주목하세요.
  • 그리고 미래의 나
  • 좋은 웹페이지 즐겨찾기