Docker-compose - Ruby - 指南针 - inotify
Docker-compose - Ruby - Compass - inotify
我正在尝试制作一个 Docker 容器,该容器能够监视我的项目并编译应该编译的内容。
对于 Sass,我有一些与 inotify 相关的问题。
当我尝试启动时:
compass watch --sass-dir /var/www/project/styles/sass/ --css-dir /var/www/project/styles/ -c /var/www/project/styles/config.rb
我遇到了这个错误:
root@88843683f769:/# compass watch --sass-dir /var/www/lbo_legacy/styles/sass --css-dir /var/www/lbo_legacy/styles/ -c /var/www/lbo_legacy/styles/config.rb --trace
>>> Compass is watching for changes. Press Ctrl-C to Stop.
Errno::EMFILE on line ["58"] of /var/lib/gems/2.3.0/gems/rb-inotify-0.9.10/lib/rb-inotify/notifier.rb: Too many open files - Failed to initialize inotify: the user limit on the total number of inotify instances has been reached.
/var/lib/gems/2.3.0/gems/sass-3.4.22/vendor/listen/lib/listen/adapters/linux.rb:66:in `new'
/var/lib/gems/2.3.0/gems/sass-3.4.22/vendor/listen/lib/listen/adapters/linux.rb:66:in `initialize_worker'
/var/lib/gems/2.3.0/gems/sass-3.4.22/vendor/listen/lib/listen/adapter.rb:87:in `initialize'
/var/lib/gems/2.3.0/gems/sass-3.4.22/vendor/listen/lib/listen/adapters/linux.rb:31:in `initialize'
/var/lib/gems/2.3.0/gems/sass-3.4.22/vendor/listen/lib/listen/adapter.rb:228:in `new'
/var/lib/gems/2.3.0/gems/sass-3.4.22/vendor/listen/lib/listen/adapter.rb:228:in `works?'
/var/lib/gems/2.3.0/gems/sass-3.4.22/vendor/listen/lib/listen/adapter.rb:190:in `block in usable_and_works?'
/var/lib/gems/2.3.0/gems/sass-3.4.22/vendor/listen/lib/listen/adapter.rb:190:in `each'
/var/lib/gems/2.3.0/gems/sass-3.4.22/vendor/listen/lib/listen/adapter.rb:190:in `all?'
/var/lib/gems/2.3.0/gems/sass-3.4.22/vendor/listen/lib/listen/adapter.rb:190:in `usable_and_works?'
/var/lib/gems/2.3.0/gems/sass-3.4.22/vendor/listen/lib/listen/adapter.rb:57:in `block in select_and_initialize'
/var/lib/gems/2.3.0/gems/sass-3.4.22/vendor/listen/lib/listen/adapter.rb:55:in `each'
/var/lib/gems/2.3.0/gems/sass-3.4.22/vendor/listen/lib/listen/adapter.rb:55:in `select_and_initialize'
/var/lib/gems/2.3.0/gems/sass-3.4.22/vendor/listen/lib/listen/listener.rb:291:in `initialize_adapter'
/var/lib/gems/2.3.0/gems/sass-3.4.22/vendor/listen/lib/listen/listener.rb:283:in `setup'
/var/lib/gems/2.3.0/gems/sass-3.4.22/vendor/listen/lib/listen/listener.rb:65:in `start!'
/var/lib/gems/2.3.0/gems/sass-3.4.22/lib/sass/plugin/compiler.rb:408:in `listen_to'
/var/lib/gems/2.3.0/gems/sass-3.4.22/lib/sass/plugin/compiler.rb:341:in `watch'
/var/lib/gems/2.3.0/gems/compass-1.0.3/lib/compass/sass_compiler.rb:46:in `watch!'
/var/lib/gems/2.3.0/gems/compass-1.0.3/lib/compass/commands/watch_project.rb:41:in `perform'
/var/lib/gems/2.3.0/gems/compass-1.0.3/lib/compass/commands/base.rb:18:in `execute'
/var/lib/gems/2.3.0/gems/compass-1.0.3/lib/compass/commands/project_base.rb:19:in `execute'
/var/lib/gems/2.3.0/gems/compass-1.0.3/lib/compass/exec/sub_command_ui.rb:43:in `perform!'
/var/lib/gems/2.3.0/gems/compass-1.0.3/lib/compass/exec/sub_command_ui.rb:15:in `run!'
/var/lib/gems/2.3.0/gems/compass-1.0.3/bin/compass:30:in `block in <top (required)>'
/var/lib/gems/2.3.0/gems/compass-1.0.3/bin/compass:44:in `<top (required)>'
/usr/local/bin/compass:23:in `load'
/usr/local/bin/compass:23:in `<main>'
我也试过增加 rb-inotify 用户限制,但还是一样的错误。
我的Docker文件:
FROM ubuntu:latest
ENV DEBIAN_FRONTEND noninteractive
RUN echo fs.inotify.max_user_watches=500000 | tee -a /etc/sysctl.conf
RUN echo fs.inotify.max_queued_events=500000 | tee -a /etc/sysctl.conf
RUN apt-get --quiet update
RUN apt-get install --yes --no-install-recommends gnupg2 vim wget git curl ca-certificates
# Node.js (and NPM).
RUN curl -sL https://deb.nodesource.com/setup_6.x | bash - \
&& apt-get install --yes nodejs build-essential
#Ruby
RUN apt-get install -y ruby ruby-dev rubygems
# Rake.
RUN gem install --no-rdoc --no-ri rake
#Sass
RUN gem install --no-rdoc --no-ri sass -v 3.4.22
# Compass.
RUN gem install --no-rdoc --no-ri compass
# Bower, Grunt CLI, Gulp.
RUN npm install --global bower grunt-cli gulp
# Clean up.
RUN apt-get autoremove --yes \
&& apt-get clean
如果我运行 "sysctl -p":
root@88843683f769:/# sysctl -p
fs.inotify.max_user_watches = 500000
fs.inotify.max_queued_events = 500000
如果需要,我的 config.rc(但无论是否使用 -c 参数都具有相同的行为...)
require 'compass/import-once/activate'
# Require any additional compass plugins here.
add_import_path "../assets/zurb_mail/node_modules/foundation-emails/scss"
# Set this to the root of your project when deployed:
http_path = "/"
css_dir = "."
sass_dir = "sass"
images_dir = "images"
javascripts_dir = "javascripts"
# You can select your preferred output style here (can be overridden via the command line):
# output_style = :expanded or :nested or :compact or :compressed
output_style= :compressed
# To enable relative paths to assets via compass helper functions. Uncomment:
# relative_assets = true
# To disable debugging comments that display the original location of your selectors. Uncomment:
# line_comments = false
# If you prefer the indented syntax, you might want to regenerate this
# project again passing --syntax sass, or you can uncomment this:
# preferred_syntax = :sass
# and then run:
# sass-convert -R --from scss --to sass sass scss && rm -rf sass && mv scss sass
它在我的 Ubuntu 主机上运行良好...
大家有什么想法吗?
所以,我并没有真正解决问题,但我找到了解决方法。
在 compass watch 命令上添加 -poll 标签就可以了。
它使用计时器而不是系统文件事件。
我正在尝试制作一个 Docker 容器,该容器能够监视我的项目并编译应该编译的内容。 对于 Sass,我有一些与 inotify 相关的问题。
当我尝试启动时:
compass watch --sass-dir /var/www/project/styles/sass/ --css-dir /var/www/project/styles/ -c /var/www/project/styles/config.rb
我遇到了这个错误:
root@88843683f769:/# compass watch --sass-dir /var/www/lbo_legacy/styles/sass --css-dir /var/www/lbo_legacy/styles/ -c /var/www/lbo_legacy/styles/config.rb --trace
>>> Compass is watching for changes. Press Ctrl-C to Stop.
Errno::EMFILE on line ["58"] of /var/lib/gems/2.3.0/gems/rb-inotify-0.9.10/lib/rb-inotify/notifier.rb: Too many open files - Failed to initialize inotify: the user limit on the total number of inotify instances has been reached.
/var/lib/gems/2.3.0/gems/sass-3.4.22/vendor/listen/lib/listen/adapters/linux.rb:66:in `new'
/var/lib/gems/2.3.0/gems/sass-3.4.22/vendor/listen/lib/listen/adapters/linux.rb:66:in `initialize_worker'
/var/lib/gems/2.3.0/gems/sass-3.4.22/vendor/listen/lib/listen/adapter.rb:87:in `initialize'
/var/lib/gems/2.3.0/gems/sass-3.4.22/vendor/listen/lib/listen/adapters/linux.rb:31:in `initialize'
/var/lib/gems/2.3.0/gems/sass-3.4.22/vendor/listen/lib/listen/adapter.rb:228:in `new'
/var/lib/gems/2.3.0/gems/sass-3.4.22/vendor/listen/lib/listen/adapter.rb:228:in `works?'
/var/lib/gems/2.3.0/gems/sass-3.4.22/vendor/listen/lib/listen/adapter.rb:190:in `block in usable_and_works?'
/var/lib/gems/2.3.0/gems/sass-3.4.22/vendor/listen/lib/listen/adapter.rb:190:in `each'
/var/lib/gems/2.3.0/gems/sass-3.4.22/vendor/listen/lib/listen/adapter.rb:190:in `all?'
/var/lib/gems/2.3.0/gems/sass-3.4.22/vendor/listen/lib/listen/adapter.rb:190:in `usable_and_works?'
/var/lib/gems/2.3.0/gems/sass-3.4.22/vendor/listen/lib/listen/adapter.rb:57:in `block in select_and_initialize'
/var/lib/gems/2.3.0/gems/sass-3.4.22/vendor/listen/lib/listen/adapter.rb:55:in `each'
/var/lib/gems/2.3.0/gems/sass-3.4.22/vendor/listen/lib/listen/adapter.rb:55:in `select_and_initialize'
/var/lib/gems/2.3.0/gems/sass-3.4.22/vendor/listen/lib/listen/listener.rb:291:in `initialize_adapter'
/var/lib/gems/2.3.0/gems/sass-3.4.22/vendor/listen/lib/listen/listener.rb:283:in `setup'
/var/lib/gems/2.3.0/gems/sass-3.4.22/vendor/listen/lib/listen/listener.rb:65:in `start!'
/var/lib/gems/2.3.0/gems/sass-3.4.22/lib/sass/plugin/compiler.rb:408:in `listen_to'
/var/lib/gems/2.3.0/gems/sass-3.4.22/lib/sass/plugin/compiler.rb:341:in `watch'
/var/lib/gems/2.3.0/gems/compass-1.0.3/lib/compass/sass_compiler.rb:46:in `watch!'
/var/lib/gems/2.3.0/gems/compass-1.0.3/lib/compass/commands/watch_project.rb:41:in `perform'
/var/lib/gems/2.3.0/gems/compass-1.0.3/lib/compass/commands/base.rb:18:in `execute'
/var/lib/gems/2.3.0/gems/compass-1.0.3/lib/compass/commands/project_base.rb:19:in `execute'
/var/lib/gems/2.3.0/gems/compass-1.0.3/lib/compass/exec/sub_command_ui.rb:43:in `perform!'
/var/lib/gems/2.3.0/gems/compass-1.0.3/lib/compass/exec/sub_command_ui.rb:15:in `run!'
/var/lib/gems/2.3.0/gems/compass-1.0.3/bin/compass:30:in `block in <top (required)>'
/var/lib/gems/2.3.0/gems/compass-1.0.3/bin/compass:44:in `<top (required)>'
/usr/local/bin/compass:23:in `load'
/usr/local/bin/compass:23:in `<main>'
我也试过增加 rb-inotify 用户限制,但还是一样的错误。
我的Docker文件:
FROM ubuntu:latest
ENV DEBIAN_FRONTEND noninteractive
RUN echo fs.inotify.max_user_watches=500000 | tee -a /etc/sysctl.conf
RUN echo fs.inotify.max_queued_events=500000 | tee -a /etc/sysctl.conf
RUN apt-get --quiet update
RUN apt-get install --yes --no-install-recommends gnupg2 vim wget git curl ca-certificates
# Node.js (and NPM).
RUN curl -sL https://deb.nodesource.com/setup_6.x | bash - \
&& apt-get install --yes nodejs build-essential
#Ruby
RUN apt-get install -y ruby ruby-dev rubygems
# Rake.
RUN gem install --no-rdoc --no-ri rake
#Sass
RUN gem install --no-rdoc --no-ri sass -v 3.4.22
# Compass.
RUN gem install --no-rdoc --no-ri compass
# Bower, Grunt CLI, Gulp.
RUN npm install --global bower grunt-cli gulp
# Clean up.
RUN apt-get autoremove --yes \
&& apt-get clean
如果我运行 "sysctl -p":
root@88843683f769:/# sysctl -p
fs.inotify.max_user_watches = 500000
fs.inotify.max_queued_events = 500000
如果需要,我的 config.rc(但无论是否使用 -c 参数都具有相同的行为...)
require 'compass/import-once/activate'
# Require any additional compass plugins here.
add_import_path "../assets/zurb_mail/node_modules/foundation-emails/scss"
# Set this to the root of your project when deployed:
http_path = "/"
css_dir = "."
sass_dir = "sass"
images_dir = "images"
javascripts_dir = "javascripts"
# You can select your preferred output style here (can be overridden via the command line):
# output_style = :expanded or :nested or :compact or :compressed
output_style= :compressed
# To enable relative paths to assets via compass helper functions. Uncomment:
# relative_assets = true
# To disable debugging comments that display the original location of your selectors. Uncomment:
# line_comments = false
# If you prefer the indented syntax, you might want to regenerate this
# project again passing --syntax sass, or you can uncomment this:
# preferred_syntax = :sass
# and then run:
# sass-convert -R --from scss --to sass sass scss && rm -rf sass && mv scss sass
它在我的 Ubuntu 主机上运行良好...
大家有什么想法吗?
所以,我并没有真正解决问题,但我找到了解决方法。 在 compass watch 命令上添加 -poll 标签就可以了。 它使用计时器而不是系统文件事件。