npm run scripts で current directory を参照したい。
環境変数を使います。
$PWD
ではダメ
npm run foo
は常に基準となるディレクトリで実行されるので、たとえば以下の npm run here
は、配下のディレクトリに潜っても同じ結果を返します。
"scripts": { "here": "echo $PWD" }
これは current directory を考慮せずに node_modules を一定の条件で使えるので、とても便利です。
なので先に設定しておく
便利ですが、 current directory が欲しい場合もありますので、別個に環境変数を設定し、それを参照します。
"scripts": { "here": "echo $C_D" }
$ C_D=$PWD npm run build
これで実行したディレクトリを得られます。(しかし調べればビルトインで参照できる変数がありそうである)
おわり。
なぜ
watchify
いまは watchify
でコンパイル行為を行なっており、こういう build
を用意しています。
"scripts": { "build": "watchify -t babelify --extension=js ./index.js -o ./built.js -v" }
特定のディレクトリを指定して watchify
SPA を作成している時分にはこれでよかったのですが、今は自習として、共通のライブラリを使う別々の小さな js ファイルを作成するということをやっています。
いっぱいあるし、個々の build
は書きたくない。
このようにしておいて
"scripts": { "build": "watchify -t babelify --extension=js $C_D/index.js -o $C_D/built.js -v" }
$ C_D=$PWD npm run build
余分な js を書く必要がなくてハッピーでした。(脱 Gulp
中かつ、なんらかの他のランナーも使う予定がなかった)
就職できました。
ところで先日カピバラ神に詣でた時の写真です。これもうあれでしょ、完全に俺のための俺視線。 pic.twitter.com/kDkHs39mlH
— おふくろさま (@o296sm) May 18, 2016
前いったときおもくそケツむけてお食事中だったけど時期が悪かったんや。いまこそ就職活動をはじめる時期だという啓示かなんかだろこれわ。
— おふくろさま (@o296sm) May 18, 2016
1年間の無職を終えました。
HeartRails | ハートレイルズ | ザ・ウェブサービス・カンパニー
よろしくおねがいします。
Capybaraのウェイト時間で足りない場合、さらに待たせる。
Capybaraはfind
などの要素検索メソッドで、見つかるまである程度の時間待ってくれます。
時間が足りない場合は
Capybara.default_max_wait_time = 30
などとすることで時間を増やせます。
all('hoge')[0].click
だとおなじみのundefined method `click' for nil:NilClass
で終わる
終わりますので、終わらせないために適当にrescue
します。
def re_find(wait = 0.5, count = 20, &block) yield rescue raise if count == 0 sleep wait re_find(wait, count - 1, &block) end
re_find { page.all('a.niceButton')[0].click }
これで中断もできますし、急場はしのげますね。
Access-Control-Allow-Originが設定されてないWeb APIを叩くために中継サーバー書いた。
大げさなタイトルみがありますがただのRailsです。
うすうす実装なのでさがせばあるんでしょうけど、人が書いたもの使いたくない場合ってあるじゃないですか。
起動
$ TARGET=http://you-want-to-ajax.server.com ALLOW=http://your-local-js.server.com rails s
つかう
あとはhttp://your-local-js.server.com
でうごくJavaScriptからhttp://localhost:3000
のRailsを叩くだけ。
Ajax側の実装でエンドポイントの根本ドメイン変えられるようにしておけば安心ですね。
わからんかった
method == 'OPTIONS'
のときはController
でsession.id
が取れないので、みんなたちで使えるような仕様にはできなかったので、ローカルだけで使えるものになった。
なんでかな。
vue-routerのroutesを全部出すやつ
だいたい見れる。
log(dig(router))
function digState (state, path = []) { state.nextStates.forEach((nextState) => { if (nextState.handlers) { nextState.handlers.forEach((handler) => path.push(handler)) } if (nextState.charSpec.validChars) { digState(nextState, path) } }) return path } function digNames (names, path = []) { for (let name in names) { router._recognizer.names[name].handlers.forEach((handler) => path.push(handler)) } } function dig (router, path = []) { digState(router._recognizer.rootState, path) digNames(router._recognizer.names, path) return path } function log (path) { let logged = {} let logs = [] path.forEach((hh) => { let h = hh.handler if (logged[h.fullPath]) { return } if (h.name) { logs.push(['/' + h.name, '=>', h.fullPath].join(' ')) } else { logs.push(h.fullPath) } logged[h.fullPath] = true }) logs.sort().forEach((l) => console.log(l)) }
ActiveAdmin辺りでCircular dependency detected while autoloading constant Fooが出る場合の措置。
Rails 4.2.7、ActiveAdmin 1.0.0.pre4で発生しました。
普通にやってる分には出ないんですけど、下の記事みたいに外からRails.application.require_environment!
すると、models関連でCircular dependency detected while autoloading constant Foo
が出ます。
mmmpa.mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmpa.net
措置
読み込み順序が問題なので、autoload_paths
の先頭にmodels
のディレクトリを追加してから、require_environment!
します。
Rails.application.config.autoload_paths.unshift("#{Rails.root}/app/models") Rails.application.require_environment!
ベーシック認証が必要なサイトにアクセスするテストで、ダイアログをシカトするためにNginxでProxyする。
Phantomjsじゃ動いてくれないJavaScriptライブラリがありまして(よくある)、Selenium + Firefoxでスクリーンショットおじさんになっています。
nginx.conf
実際はRubyではないのでこのようなコードではないんですけど、概念的にこんな感じです。
server { listen 8080; server_name localhost; location / { proxy_set_header Authorization "Basic #{Base64.encode64 'id:password'}"; proxy_pass https://my-secret-web-site.com; } }
Base64エンコードしたのをヘッダに含めます。
一般的にはブラウザでのアクセスの際や、エンドポイントの設定ファイルでhttps://id:password@my-secret-web-site.com
でやったりするんでしょうけど、ライブラリがパースをしくじったり、なんかブラウザに丸出しになるのがイヤって時に使えます。