npm run dev で cronss-env.js のError
発生タイミング
- Laravel5.3 で Vue.js のアプリ生成時に npm run dev でタスク実行
発生したError
> node node_modules/cross-env/bin/cross-env.js NODE_ENV=development node_modules/webpack/bin/webpack.js --progress --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js module.js:457 throw err; ^ Error: Cannot find module '/path/to/laravel-src/node_modules/cross-env/bin/cross-env.js' at Function.Module._resolveFilename (module.js:455:15) at Function.Module._load (module.js:403:25) at Module.runMain (module.js:590:10)
修正箇所
package.json の cross-env.js のpath を変更
変更後 は cross-env/bin/cross-env.js -> cross-env/dist/bin/cross-env.js
"scripts": { "dev": "node node_modules/cross-env/dist/bin/cross-env.js NODE_ENV=development node_modules/webpack/bin/webpack.js --progress --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js", "watch": "node node_modules/cross-env/dist/bin/cross-env.js NODE_ENV=development node_modules/webpack/bin/webpack.js --watch --progress --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js", "watch-poll": "node node_modules/cross-env/dist/bin/cross-env.js NODE_ENV=development node_modules/webpack/bin/webpack.js --watch --watch-poll --progress --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js", "hot": "node node_modules/cross-env/dist/bin/cross-env.js NODE_ENV=development node_modules/webpack-dev-server/bin/webpack-dev-server.js --inline --hot --config=node_modules/laravel-mix/setup/webpack.config.js", "production": "node node_modules/cross-env/dist/bin/cross-env.js NODE_ENV=production node_modules/webpack/bin/webpack.js --progress --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js" },
参考URL
余談
- Laravel を個人Pjで使いたいなーと思いながら放置していたので、触りたかったVue.js と併せて遊び中
- あと最近はErrorを書くだけのブログになっている。想いとか、今考えている事とか書きたい。
- 今日からモバイルルーターを使い始めるので、家 && 夜中 以外の条件でもブログ書けそう。
Rails Task で uninitialized constant Error
これが設定より規約 CoC(Convention over Configuration) というやつなのか。
Taskである処理の結果をResult モデルに入れようとしていて、
インスタンスを作る所でexception 発生。
原因はつかめてないが、class 名がぶつかったのか?
この辺りの理解(Rubyの書き方)が全く出来ていない。このあたりはこれからの課題。
今回はResult->Log に変え class Tasks::Log に変更。
class Tasks::Result def self.execute begin logger.info("start") r = Result.new <--- ここでException発生 r. xxxx r.save rescue => e logger.error("#{e} : #{e.backtrace.inject(result = "") { |result, stack| result += "from:#{stack}\n" }}") ensure logger.info("end") end end end
で発生したエラーログは
uninitialized constant Tasks::Result::Result
雑感
今回Railsで実装する上で作りたい機能をベースに調べながら作っている。
今までは体系的な学習を意識していたが、いつまでたっても作りたい物が作れなかったので、
今回はあえて、作る物→必要な実装を調べる。という流れで進めている。
ただ、こうやって実装で詰まる事が出てきたので、そろそろRubyのパーフェクトRubyとか
目を通しておこうと思い始めてきた。
追記予定
今後内容を理解したら原因と理由を追記
ActiveRecordを使って生sqlを書く場合
Base.connection.select_all あたりは細かく知りたい
hash = ActiveRecord::Base.connection.select_all("select sum(sub1.diff) from (select diff from differences order by created_at desc limit 5) sub1").to_hash puts hash[0]["diff"]
Herokuでrails runner が実行されない
local の develop 環境では動いているがheroku(production)では実行されない
結論
- Rails5 では production 環境の autoload で lib を対象としない
- application.rb に eager_load を指定し、lib を対象とするようにした
やろうとしていた事
- rails runner で lib/tasks/xxx.rb の実行
- xxx.rb の中では puts “debug!” のような処理
- heroku logs には 以下のログがあり、exit 0 にならない
2017-02-11T17:51:30.739318+00:00 heroku[run.7502]: Awaiting client 2017-02-11T17:51:30.766742+00:00 heroku[run.7502]: Starting process with command `rails runner Tasks::Batch.execute` 2017-02-11T17:51:30.959538+00:00 heroku[run.7502]: State changed from starting to up 2017-02-11T17:51:37.230180+00:00 heroku[run.7502]: Process exited with status 1 2017-02-11T17:51:37.277912+00:00 heroku[run.7502]: State changed from up to complete
試した事
- develop では 正常に処理が走る
- rails runner Tasks::Batch.execute
- production では NG
- heroku run rails runner Tasks::Batch.execute
- app の lib ではない directory に配置したファイルであれば、実行出来る
- puts なども叩ける
- heroku run rails runner -e production “p\(1\)”
Please specify a valid ruby command or the path of a script to run. Run 'bin/rails runner -h' for help.
雑感
少しずつ切り分けをしてproduction だけで発生する事から環境依存という事はつかめていたが、
application.rb や config したのファイルをキーにググる事数時間。
参照
Rails runnerを使ってファイルを実行しました - Qiita
Heroku で bin/rails: No such file or directory
こんな事にハマる人はどこにも居ないと思うが、いつかの自分の為に。
結論
- ~/.gitignore に /bin/ の記載があり、/bin 以下のファイルがheroku に push されていなかった
HerokuでRailsを起動したら
Application error An error occurred in the application and your page could not be served. If you are the application owner, check your logs for details.
Heroku のログを見る
$ heroku logs -t 2017-02-04T06:51:56.618341+00:00 heroku[web.1]: State changed from crashed to starting 2017-02-04T06:51:58.524827+00:00 heroku[web.1]: Starting process with command `bin/rails server -p 29792 -e production` 2017-02-04T06:52:00.050294+00:00 app[web.1]: bash: bin/rails: No such file or directory 2017-02-04T06:52:00.122536+00:00 heroku[web.1]: State changed from starting to crashed 2017-02-04T06:52:00.116558+00:00 heroku[web.1]: Process exited with status 127
bin/rails がないようだ
- ぐぐると、同じような問題に遭遇している人を発見
なぜか.gitignore に /bin/ の記載が。。。
- コメントには Intelli J と書いてある。
- global にしたい気持ちはわかるが、今後はプロジェクトの.gitignore に書くようにする
気を取り直して、再度 heroku push まで
bundle install git commit -am "xxx" git push heroku master
雑感
さくっとrails を使おうと思ったら、まさかこんな所で。
2016振り返りと2017目標
毎年恒例になってきた。
2015振り返りと2016目標
Run
- 目標
- 600km ( 月50km )
- 結果
- 274km ( 月50km達成は1ヶ月 )
- 昨年との差3.1km
- もしかしたら、270kmくらいが自身の限界なのか?!
- 4月にジムに入会し、出社前にトレッドミルのランに挑戦したが3ヶ月目で失速
- 出社前にジムにいくという習慣を2ヶ月くらい続けられたのは楽しかった
Learn ( TOEIC )
- 目標
- over 600
- 結果
- 520どまり
Learn ( Other )
- 目標と結果 ( 2015のブログから )
- 目標にない部分
他に年始に考えていた事
- 環境変化
- 2016/7に引っ越し
- 2016/11より新しい職場への転職
- 家族
2017目標
- 追記予定
雑感
いろいろ考えながら振り返ってたら考えがまとまらず時間オーバー
続きは近日
今年の書き初めはPHPでした
PHP5.4から利用できるTrait(Scalaでも同名)とInterfaceを利用した場合、 お作法としてTraitとInterfaceはセットで定義しておく。
理由としては、Traitは型宣言に利用できない(タイプヒント出来ない)為、 メソッドが特定の型を要求する場合は、タイプヒントする為にInterfaceを定義しておく必要がある。 (独習PHP10.5.4より参照で、この文の意味が理解不足)
・型を継承するインターフェース
・実装を継承するトレイト
この違いは理解したと思うが、メソッドが特定の型を要求する場合の為にInterfaceを定義しておくという 説明についてはコードレベルで理解出来ていない。
<?php // 型を定義 interface IFax { function send(); } interface IPrinter { function printer(); } // 実装を定義 trait FaxTrait { public function send() { print 'sending Fax...sended!'; } } trait PrinterTrait { public function printer() { print 'printing ... complete!'; } } class FaxPrinter implements IFax, IPrinter { use FaxTrait, PrinterTrait; } $fp = new FaxPrinter(); $fp->send(); $fp->printer();