質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Sass

Sassは、プログラミング風のコードでCSSを生成できるスタイルシート言語です。 scss ファイルを、変換(コンパイル)してCSSファイルを作成します。

gulp

gulpは、Node.jsをベースとしたタスク自動化ツールの一つ。ストリームでファイルを処理することが特徴です。CSSプリプロセッサの使用時のコンパイルや、CSS・JavaScriptファイルの圧縮・結合などを自動的に行うことができます。

Q&A

1回答

3042閲覧

gulp(gulp-ruby-sass)でのsassコンパイルエラーについて

y214

総合スコア33

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Sass

Sassは、プログラミング風のコードでCSSを生成できるスタイルシート言語です。 scss ファイルを、変換(コンパイル)してCSSファイルを作成します。

gulp

gulpは、Node.jsをベースとしたタスク自動化ツールの一つ。ストリームでファイルを処理することが特徴です。CSSプリプロセッサの使用時のコンパイルや、CSS・JavaScriptファイルの圧縮・結合などを自動的に行うことができます。

0グッド

0クリップ

投稿2015/09/15 00:24

質問

gulpでsassをコンパイルしようとすると、下記エラーが発生します。

[RubySass] Error in plugin 'gulp-ruby-sass' Message: spawn ENOENT: Missing the Sass executable. Please install and make available on your PATH.

rootユーザでgulpを実行した際は上記エラーは出ませんが、他のユーザで実行した際はエラーが出ます。
処理の関係上、rootユーザ以外のユーザでgulpを行いたく、上記エラーの解決方法をご教授いただければと思います。

実行概要

OS : CentOS6.5
使用プラグイン:gulp-ruby-sass

gulpのタスクファイル

'use strict'; ~~~~~ 中略 ~~~~~~~ gulp.task('styles', function () { var sassOptions = { style: 'expanded' }; ~~~~~ 中略 ~~~~~~~ return gulp.src([ path.join(conf.paths.src, '/app/index.scss') ]) .pipe($.inject(injectFiles, injectOptions)) .pipe(wiredep(_.extend({}, conf.wiredep))) .pipe($.rubySass(sassOptions)).on('error', conf.errorHandler('RubySass')) .pipe(cssFilter) .pipe($.sourcemaps.init({ loadMaps: true })) .pipe($.autoprefixer()).on('error', conf.errorHandler('Autoprefixer')) .pipe($.sourcemaps.write()) .pipe(cssFilter.restore()) .pipe(gulp.dest(path.join(conf.paths.tmp, '/serve/app/'))) .pipe(browserSync.reload({ stream: true })); });

Sassのインストール方法

[root@remote]$ sudo gem install sass [root@remote]$ sass -v Sass 3.4.18 (Selective Steve)

この状況で、rootユーザであればgulpを実行しても問題なく動作します。

[root@remote]$ sass -v Sass 3.4.18 (Selective Steve) [root@remote]$ gulp [09:06:18] Using gulpfile /path/to/gulp/task/file [09:06:18] Starting 'clean'... [09:06:19] Finished 'clean' after 134 ms [09:06:19] Starting 'default'... [09:06:19] Starting 'scripts'... [09:06:19] Starting 'styles'... [09:06:20] Starting 'partials'... [09:06:20] Starting 'fonts'... [09:06:20] Starting 'other'... [09:06:20] Finished 'default' after 1.81 s [09:06:21] gulp-inject 3 files into index.scss. [09:06:24] gulp-ruby-sass: directory <-------------- うまくいく write index.css write index.css.map [09:06:25] Finished 'styles' after 6.16 s ~~~~~ 略 ~~~~~~~

ところが、別ユーザだと

[user1@remote]$ sass -v Sass 3.4.18 (Selective Steve) [user1@remote]$ sudo gulp [09:09:37] Using gulpfile /path/to/gulp/task/file [09:09:37] Starting 'clean'... [09:09:37] Finished 'clean' after 155 ms [09:09:37] Starting 'default'... [09:09:37] Starting 'scripts'... [09:09:37] Starting 'styles'... [09:09:38] Starting 'partials'... [09:09:38] Starting 'fonts'... [09:09:39] Starting 'other'... [09:09:39] Finished 'default' after 1.84 s [09:09:39] gulp-inject 3 files into index.scss. [09:09:39] [RubySass] Error in plugin 'gulp-ruby-sass' <-------------- 失敗 Message: spawn ENOENT: Missing the Sass executable. Please install and make available on your PATH. [09:09:39] Finished 'styles' after 2.04 s ~~~~~ 略 ~~~~~~~

となります。

他にも、sassをbundleインストール後、gulpタスクファイルでbundle exectrueに、てbundleでsassを呼び出す方法も試しましたが、同じエラーが出てきました。

gulpでの処理は、capistranoでdeployユーザとして行うため、rootユーザでは無く他のユーザでも処理が行えるようにしたいのです。

丸一日ハマりましたが、解決方法が見いだせないでいます。。。
長文となってしまい大変申し訳ございません。どなたがご教授いただけると幸いです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

手助けできるかわかりませんが、user1のユーザーからsassが実行できていないように思えます。gulpで実行せず、直接sassコマンドで実行するとどうなるのでしょうか?

また、

[user1@remote]$ sudo gulp

と実行している、ということは、user1の環境変数のまま、rootに昇格して実行している、ということです。そもそもここでrootに昇格しなければならないのであれば、deployerユーザーでの実行ではなくなっている気もしますがいかがでしょうか?

投稿2015/09/15 09:23

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

y214

2015/09/15 11:34

kompiroさん ご回答ありがとうございます! おかげさまで解決しました!!ただ、理由がわかりません。。。 これは一体全体どういうことなのでしょう。。。 以下、対応ログです。 > ということは、user1の環境変数のまま、rootに昇格して実行している、ということです。そもそもここでrootに昇格しなければならないのであれば、deployerユーザーでの実行ではなくなっている気もしますがいかがでしょうか? ここで「はっ!」と思い、deployユーザにて通常のgulp実行を行いました。 すると、 ``` [deploy@remote]$ gulp [19:14:23] Using gulpfile /path/to/gulp/task/file [19:14:23] Starting 'clean'... [19:14:23] 'clean' errored after 151 ms [19:14:23] Error: EACCES, rmdir '/var/www/app-name/dist/assets' ~~~~~ 略 ~~~~~~~ ``` 半ば自棄で``/var/www/app-name/dist``を削除しました。 もう一度gulpを実行すると、、、 ``` [deploy@remote]$ gulp [19:15:51] Using gulpfile /path/to/gulp/task/file [19:15:51] Starting 'clean'... [19:15:51] 'clean' errored after 133 ms [19:15:51] Error: EACCES, rmdir '/var/www/app-name/.tmp/partials' ``` 今度は``/var/www/app-name/.tmp``を削除しました。 再度gulpを実行 ``` [deploy@remote]$ gulp [19:16:24] Using gulpfile /path/to/gulp/task/file [19:16:24] Starting 'clean'... [19:16:24] Finished 'clean' after 128 ms [19:16:24] Starting 'default'... [19:16:24] Starting 'scripts'... [19:16:24] Starting 'styles'... [19:16:24] 'styles' errored after 354 ms [19:16:24] Error: EACCES, permission denied '/tmp/gulp-ruby-sass/index.scss' ``` もう``/tmp/gulp-ruby-sass``も削除しました。 以上、 ``` /var/www/app-name/dist /var/www/app-name/.tmp /tmp/gulp-ruby-sass ``` の3つのディレクトリを削除することでエラーは起きなくなり、通常通りgulpによるsassコンパイルが可能となりました。 ``` [deploy@remote]$ sudo gulp ``` の場合は、もちろん``rmdir``は実行可能なのでエラーになることは無かったのですが、sassを呼び出せない。 ``` [deploy@remote]$ gulp ``` の場合はもちろん``rmdir``は実行できないのでエラーになるが、対象ディレクトリを削除することでgulpが実行でき、sassも呼び出せる。 両者の違いは何なのでしょうか。。。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問