Rails Tutoial 13章 カスタマイズ HerokuアプリのCarrierWaveのアップロード先をdropboxにした。
貧乏なのでS3辛くてね。Dropboxあるだろと思ったらやっぱりあった。
hyperneetprogrammer.hatenablog.com
基本このリンク先に従えばOK。
設定
herokuに環境変数与えないといけないので
heroku config:set D_APP_KEY="5glfo" heroku config:set D_APP_SECRET="4lz09muo" heroku config:set D_ACCESS_TOKEN="x4za9" heroku config:set D_ACCESS_TOKEN_SECRET="f7w2f" heroku config:set D_USER_ID="299999"
を実行する。
herokuにS3につながっているテストmicropostがあるのでリセットする
$ heroku pg:reset DATABASE $ heroku run rails db:migrate $ heroku run rails db:seed
picture_uploader.rb
if Rails.env.production? storage :dropbox else storage :file end
carrier_wave.rb
CarrierWave.configure do |config| config.dropbox_app_key = ENV["D_APP_KEY"] config.dropbox_app_secret = ENV["D_APP_SECRET"] config.dropbox_access_token = ENV["D_ACCESS_TOKEN"] config.dropbox_access_token_secret = ENV["D_ACCESS_TOKEN_SECRET"] config.dropbox_user_id = ENV["D_USER_ID"] config.dropbox_access_type = "app_folder" end
結果
何の事はない。上手く行った。気持ちS3のときよりレスポンスが悪くなった気がするけど無料なので。無料なので
所要時間も10分かからず。
Rails Tutorial 13章
コマンドライン実行(初心者)
Eclipseに頼りきりだったのでこの辺りとても手薄。
NoClassDefFoundErrorに悩まされた。
package jp; import jp.lib.LibA; public class DMain { /** * @param args */ public static void main(String[] args) { if(args.length != 2){ System.out.println("USAGE:\n java -cp /path/to/classpath jp/DMain arg1 arg2"); return; } LibA libA = new LibA(); System.out.println(libA.sb(args[0], args[1])); } }
D:\workspaces\workspace1\JavaTest\bin>java -classpath D:\workspaces\workspace1\JavaTest\bin jp/DMain arg1 arg2
コレで戦える!!
Rails Tutorial 12章
Rails Tutorial 11章
11章のテストを書く演習
テストはむずいね
あからじめ3番目のユーザーはactivatedをfalseにしてある
testuser3: name: Test User3 email: test3@example.com password_digest: <%= User.digest('password') %> activated: false activated_at: nil
test "activated されたユーザーだけがuser/?として表示される" do log_in_as(@not_activated_user) assert_redirected_to root_url end test "activatedされたユーザーだけがusersに表示されるか" do log_in_as @user get users_path assert_select "a[href=?]", '/users/3', count: 0 end
Multi Track Playerっぽいのつくった。
本人バレが怖いのでgithubのありかとか配備場所とかは言えませんが、私、バンド活動をしておりまして、練習後の会話で「マルチトラックレコーダーのweb版とか無いのかな?」という話になりまして、探したけど、きっとあるのだろうけど見つけられないので2時間ぐらいで作りました。作ったのはマルチトラックプレイヤーです。トラックをアップローダーでアップして、アップしたファイルをaudioタグにセットして協調して再生、一時停止、シークとかが出来ればよいかなと。バンドの皆さんからは高評価を頂いております。
アップローダーはいぜんどこからか持ってきたものを流用しました。以下、マルチトラックプレイヤー部分のソース。
phpファイル
<?php error_reporting(E_ALL); function getFiles(){ $mp3_files = glob("/var/www/hoge/mtr/uploader/uploads/*.mp3"); $m4a_files = glob("/var/www/hoge/mtr/uploader/uploads/*.m4a"); return array_merge($mp3_files,$m4a_files); } function renderSelect($files,$i){ $html = "<select id=\"select-" . $i . "\" style=\"display:inline-block\">\n"; foreach($files as $k => $v){ $html .= "<option value='" . normalizePath($v) . "'>" . basename($v) . "</option>\n"; } $html .= "</select>\n"; return $html; } function renderSetButtons($i){ $html = "<button id=\"set-" . $i . "\" data-select=\"select-" . $i . "\" data-audio=\"audio-" . $i . "\">set</button>\n"; $html .= "<button id=\"unset-" . $i . "\" data-select=\"select-". $i . "\" data-audio=\"audio-" . $i . "\">unset</button>\n"; $html .= "<span id=\"setted-" . $i . "\"></span>"; return $html; } function normalizePath($value){ return "https://somewhereinwww/hoge/mtr/uploader/uploads/" . basename($value); } $files = getFiles(); ?> <!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <link rel="stylesheet" href="//code.jquery.com/ui/1.9.2/themes/base/jquery-ui.css" /> <!--[if lt IE 9]> <script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script> <![endif]--> <title>Multi Track Player</title> <script src="//code.jquery.com/jquery-1.8.3.js"></script> <script src="//code.jquery.com/ui/1.9.2/jquery-ui.js"></script> <script src="app.js"></script> </head> <body> <h1>Multi Track Player</h1> <?php for($i=0,$l=8;$i <$l;$i++){ ?> <div> <audio id="audio-<?php echo $i?>" src="" controls> <p>音声を再生するには、audioタグをサポートしたブラウザが必要です。</p> </audio> <?php echo renderSelect($files,$i)?> <?php echo renderSetButtons($i) ?> </div> <?php } ?> <p><button id="play">play</button> <button id="pause">Pause</button></p> <div id="slider" style="margin:20px;"></div> </body> </html>
JS
$(function(){ $("#slider").slider({min : 0}); var max_duration = 0; function play(){ $("audio[id^='audio']").each(function(){ try{ if($(this)[0].src != "" ){ $(this)[0].play().catch(function(){}); } } catch (x) { } }); } function pause(){ $("audio[id^='audio']").each(function(){ try{ if($(this)[0].src != "" ){ $(this)[0].pause().catch(function(){}); } } catch (x) { } }); } function setCurrentTime(time){ $("audio[id^='audio']").each(function(){ if($(this)[0].src != undefined ){ $(this)[0].currentTime = time; } }); } $("#play").click(function(){ play(); }); $("#pause").click(function(){ pause(); }); $("button[id^='set']").click(function(){ var src= $("#" + $(this).data("select")).val(); $("#" + $(this).data("audio"))[0].src = src; setTimeout(function(elem){ var duration = $("#" + $(elem).data("audio"))[0].duration; if(max_duration < duration){ max_duration = duration; $("#slider").slider( {max : duration, min : 0 }); } },200,this); }); $("button[id^='unset']").click(function(){ $("#" + $(this).data("audio")).attr("src",""); }); var players = $("audio[id^='audio']"); players.each(function(){ var player = $(this)[0]; player.addEventListener("timeupdate",function(){ if(player.currentTime){ var VALUE = Math.floor(player.currentTime); $("#slider").slider({value : VALUE}); } }); }); $("#slider").on("mouseup touchend",function () { var currentTime = $("#slider").slider("value"); setCurrentTime(currentTime); play(); }); $("#slider").on("mousedown touchstart",function () { pause(); }); });
chromeが怒るので
.catch(function(){})
みたいなソース初めて使いました。
jQueryから抜け出せない。
stackoverflow.com
Rails Tutorial 9章 10章
9章
なんかいつの間にか終わらせてた。
理解が進んでいないので一回読んだあともう一度読んだ。
自分一人で実装とかできる自信ない。
10.0の最初の演習
newとeditでformを共有したいって要件
下記のようにした。
view
optionで必要な値を与える
<% provide :title, "Sign up" %> <% provide :button_text, "Create my account" %> <% option = { url: signup_path } %> <h1>Sign up</h1> <div class="row"> <div class="col-md-6 col-md-offset-3"> <%= render "form", option: option %> </div> </div>
共有するform
<%= form_for(@user, option ||= {} ) do |f| %> <%= render 'shared/error_messages' %> <%= f.label :name %> <%= f.text_field :name, class: 'form-control' %>
10.0の最後の演習
Nokogiriぇーー
assert_select "div#error_explanation > ul > li", count: 4
面白いねrails。rails5は本当に完成度高い。