みかづきメモ

学習したことのメモとか、日記とか、備忘録。

Windows + Docker で、あるハズのファイルに No such file or directory を言われる

Windows + Docker で、 Docker イメージを作っているとき、
COPY で突っ込んだシェルスクリプトが、呼べないことがあった。
原因は改行コードで、 CRLF を LF にした上で送信すると、正常に実行された。

参考:

rubyzip でパーミッション付きで解凍したい

タイトルまま。

require 'zip'

Zip::File.open(file) do |zip_file|
  zip_file.each do |entry|
    entry.restore_permissions = true # ここ!
    entry.extract
  end
end

このままだと、ディレクトリが来たときとか死ぬ気がするけど、それはそれで。

Administrate の Enumerize プラグインを作った

最近、管理画面に Administrate を採用していて、かつ enumi18n とかで
Enumerize を使っているので、良い感じにするためのプラグインを作りました。

administrate-field-enumerize | RubyGems.org | your community gem host

他の Field と同じように、 Enumerize を使って定義した物に対して、
ATTRIBUTE_TYPESField::Enumerize を指定することで、良い感じにします。

詳しい使い方やバグ修正などがあれば、 GitHub リポジトリまでお願いします。

github.com

macOS で rmagick をインストールしたい

rmagick のインストールがしたかった。 bundle コマンドで rmagick を入れようとすると、下のようなエラーが出る。

ERROR:  Error installing rmagick:
    ERROR: Failed to build gem native extension.

    current directory: /usr/local/lib/ruby/gems/2.4.0/gems/rmagick-2.16.0/ext/RMagick
/usr/local/opt/ruby/bin/ruby -r ./siteconf20170629-84148-1e6a7u1.rb extconf.rb
checking for clang... yes
checking for Magick-config... no
checking for pkg-config... yes
checking for outdated ImageMagick version (<= 6.4.9)... no
checking for presence of MagickWand API (ImageMagick version >= 6.9.0)... no
checking for Ruby version >= 1.8.5... yes
checking for stdint.h... yes
checking for sys/types.h... yes
checking for wand/MagickWand.h... no

Can't install RMagick 2.16.0. Can't find MagickWand.h.
*** extconf.rb failed ***
Could not create Makefile due to some reason, probably lack of necessary
libraries and/or headers.  Check the mkmf.log file for more details.  You may
need configuration options.

Provided configuration options:
    --with-opt-dir
    --with-opt-include
    --without-opt-include=${opt-dir}/include
    --with-opt-lib
    --without-opt-lib=${opt-dir}/lib
    --with-make-prog
    --without-make-prog
    --srcdir=.
    --curdir
    --ruby=/usr/local/Cellar/ruby/2.4.1_1/bin/$(RUBY_BASE_NAME)

To see why this extension failed to compile, please check the mkmf.log which can be found here:

  /usr/local/lib/ruby/gems/2.4.0/extensions/x86_64-darwin-16/2.4.0/rmagick-2.16.0/mkmf.log

extconf failed, exit code 1

Gem files will remain installed in /usr/local/lib/ruby/gems/2.4.0/gems/rmagick-2.16.0 for inspection.
Results logged to /usr/local/lib/ruby/gems/2.4.0/extensions/x86_64-darwin-16/2.4.0/rmagick-2.16.0/gem_make.out

結論をいうと、RMagick 2.16.0 では、 ImageMagick 7 に対応していないので、
古いバージョンもインストールすることで解決した。

$ brew install imagemagick@6
$ export PKG_CONFIG_PATH=/usr/local/Cellar/imagemagick@6/6.9.8-10/lib/pkgconfig/
$ bundle

Node.js で FATAL ERROR: CALL_AND_RETRY_LAST Allocation failed - JavaScript heap out of memory

Node.js で Electron アプリを作成していたら、ビルド時の最適化の際、
タイトル通りのエラーが発生した。
解決方法としては、実行時にオプションを付け足せば良いみたい。

$ node --max_old_space_size=4096 $(which yarn) run package

参考: AOT build fails due to "JavaScript heap out of memory" · Issue #5618 · angular/angular-cli · GitHub