2017-08-17 203 views
1

我想讓Docker容器能夠看我的項目並編譯應該編譯的內容。 隨着Sass,我有一些與inotify有關的問題。Docker-compose - Ruby - Compass - inotify

當我嘗試推出:

compass watch --sass-dir /var/www/project/styles/sass/ --css-dir /var/www/project/styles/ -c /var/www/project/styles/config.rb 

我得到這個錯誤:

[email protected]:/# 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的用戶數限制,但仍是同樣的錯誤。

我Dockerfile:

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」:

[email protected]:/# 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主機壽精...

任何想法傢伙?

回答

0

所以,我沒有真正解決這個問題,但我找到了一個workarround。 在指南針監視命令上添加-poll標記可以做到這一點。 它使用計時器而不是系統文件事件。