一般提供された CloudFront lambda@Edge で、Basic認証を設定する

preview と 仕様が変わっています。nodejsは6.10を選ぶ必要があり、headers の構造も変わっていました。 Cloudfrontのarn指定に、lambda を version がなければいけないのも、なかなかめんどくさい変更です。 あとは、role の設定も面倒ですが、一旦書きませ…

CloudFront にCloudFront を入れるときの注意点

CloudFront は、Request header に含まれる Hostの値が、CloudFrontに設定されたCNAMEと一致していないとレスポンスを返さない。 CloudFrontに設定されたCNAMEは、すべてのCloudFrontで2つ同じCNAMEを設定できない。Behavior の Forward Headers は、Host を…

mysql5.7 の 注意点 (< 5.7.11)

RDS 上で mysql 5.7 を使うときに覚えておかなければならないことは一つで、default_password_lifetime この値が、5.7.10 以下の時、360 になっています。 SELECT @@default_password_lifetime; つまり360日で期限切れになりログインできなくなります。RDS …

Route53 で Domain name status code がブランクな場合

jp や、io のドメインで確認しましたが、Domain name status code がブランクのままになるドメインがあります。 whois コマンドで、 [状態] Active となっていれば、気にせず安心して良いと、AWSに回答いただきました。

CloudFront lambda@Edge で、Basic認証を設定する

S3+CloudFrontなど、サーバーレスでBasic認証をかける方法を何年も検討していたのですが、CloudFrontにLambdaを割り当てられるようになり、試したところ実装することがで来ました。まだPreview版ですが、フォームから申請することで、数日で許可が得られます…

SES でメール送信時にリジェクトされる

Net::SMTPFatalError: 554 Message rejected: Email address is not verified. The following identities failed the check in region US-EAST-1 ActionMailer で送信した例だが、このようにメール送信がデフォルト状態だと出来ない。 Your Amazon SES accou…

Lambda@Edge を利用し、Cloudfrontに設定ようとしたとき、エラーが表示される

There was an error creating the trigger: Completing this action would cause the maximum number of distributions with Lambda function associations per owner to be exceeded (maximum allowed is 0). Lambda@Edge は現在プレビュー版となっており、…

AWS SSM で、EC2に任意のコマンドを実行する

ssm は、ssh で接続することなく、 必要な role があれば、特定の EC2 上へコマンドを送ることが出来ます。 Amazon Linux に対しても、実行できます。EC2の自動セットアップを行いながらも、ssh キーの登録をしたくないようなときに役立ちます。 実行するリ…

Rails5 では、production 時、config.autoload_paths が機能しない

こちらに変更点が書かれていますが、A Guide for Upgrading Ruby on Rails — Ruby on Rails Guides Autoloadを有効にする $ vi config/environments/production.rb config.enable_dependency_loading = true 起動時にロードする config.eager_load_paths += …

Twitter Card の申請が通った場合、同一ドメインすべてでTwitterカードが有効になる

https://appspot.info/share/11111の審査が通った場合、ドメイン単位で承認されるため、ほかのパスも有効になります。https://appspot.info/hoge/2222

Rails5 ActiveRecord で select をする時の高速化便利関数

select 高速化のヒント class Parent has_many :childs end class Child belongs_to :parent end has_many の配列データ側を絞り込む。なければ parent も返らない。 Parent.includes(:childs).where("childs.age > ?", 20).references(:childs) belongs_to …

AWS Elastic Beanstalk x Ruby on Rails で構築する

セットアップする環境 Ruby on Rails5 RDS (Mysql) Puma CloudFront を用いて起動させる。アプリケーション名は {app name} とする。 手順 RDS を起動 eb コマンドで、同時にRDS を起動させることも可能だが、アプリケーションの削除と同時に、RDSも消えてし…

AWS Lambda で、 python から mysql に接続する

aws lambda で python から mysql が使いたい場合は、 $ pip install mysql-python -t . $ vi lambda_function.py ...さらに、`libmysqlclient.so.*` がないと起動できない。http://www.filewatcher.com/ ここなどで適当なファイルをダウンロードし、同じフ…

MiniJSON で text の Json.Deserialize が null になる場合

Json のフォーマットがおかしいことが考えられるが、 textは見かけ上問題ない場合がある。そんな場合によくあるのが、BOM (バイトオーダーマーク)という情報がテキストデータの先頭に含まれている場合。windows 標準のメモ帳など、UTF-8には、通常はつけるべ…

Certificate Manager で取得した証明書が、CloudFront で選択できない

Certificate Manager が 東京リージョンでも取得できるようになりましたが、 CloudFrontは、バージニア北部 (us-east-1) で取得した証明書でないと設定できません。よくある質問 - AWS Certificate Manager(簡単に SSL/TLS 証明書を作成、管理、配置) | AW…

Lineのメッセージで、URLが展開されない

Line の チャット画面上で、 OG情報を展開させるには、 http または、httpsのプロトコルsslv3(脆弱性があり利用停止が推奨されている)に対応させるひつようがあり、 httpsのプロトコルTLSだと表示されません。おそらく数年以内に改善されるはずです。

NginxでUnicornが別Portへリダイレクトしてしまう

$http_host は ポート含む $host は、ポート含まないたとえば、このような経路でサイトを表示させるとき、 ブラウザ =(80)=> Cloud Front =(8000)=> ELB =(80)=> Nginx =(socket)=> Unicorn このようにポート8000にして通過させると、Unicorn 側に 8000ポー…

Rails で Base64 エンコードされた文字を Carrierwave で保存する最も良い方法

File クラスを使うと、ストレージの読み書きが発生し、速度が落ちるため、メモリ上だけで処理を行う方針。 File クラスと同じ処理をするため、メソッドを定義する。 class StringFileIO < StringIO def self.create_from_canvas_base64 str return nil if st…

Wordpress で visual editor の タブが表示されないとき

原因不明だが、'wp-includes/js/tinymce' フォルダを、再ダウンロードしたファイルで置き換える User > Your Profile ページの Visual Editor にチェックが入っている nginx などで、user agent に、empty の文字列を渡している というのありえるようだ。

CloudFront 使用時、scheme を取得する

CloudFront を使用時、https での通信でも、nginx の $scheme に http が入ってしまっている。CloudFront-Forwarded-Proto ヘッダーに、original の scheme が入っているので、それを利用する。 CloudFront Whitelist Headers に、CloudFront-Forwarded-Prot…

ActiveAdmin で、belongs_to, accepts_nested_attributes_for を設定したmodelも同時に表示・編集する

ActiveAdmin で、belongs_to, accepts_nested_attributes_for を設定したmodelも同時に表示・編集する ActiveAdmin.register UserLogin do # ... form do |f| f.inputs nil, for: [:user, f.object.user || User.new] do |fc| fc.input :icon fc.input :full…

Twitter card type player を 使う

Twitter card には、いくつかの種類があるが、dev.twitter.complayer というのが実はかなり高機能で、 自分の好きな html を iframe で twitter に埋め込むことが出来る仕組みになっています。だが、使用するには card validater を使い、審査をしてもらう必…

Unity5.2 で Shader が指定している Quere が無視される

無視され、描画される順番が狂います。Inspector を Debug に変更し、Custom Render Quere を -1 に指定すると正しく動きます。

mod-wsgi を python3.5.0 + pyenv + Apache2 で、AmazonLinux 上に構築

mod-wsgi は、python と1:1で紐付いているため、apacheに1つまでしか追加できない。 pyenv を入れる 公式に書いてあるとおり。 yyuu/pyenv · GitHub $ git clone https://github.com/yyuu/pyenv.git ~/.pyenv ・・・ python3 を入れる このときに、オプショ…

Unity から C++ 側でallocした配列にアクセスする

C++で new し、C#側で一旦コピー、さらにC++で削除 hoge.h #pragma once #define DLL_UNITY extern "C" __declspec(dllexport) typedef unsigned char byte ; DLL_UNITY void loadData (byte** data, int* dataSize); DLL_UNITY void freeData (byte** data)…

ViewPager 利用時、 FragmentManager 内に Adapterで返しているより少ない数しか入っていない

FragmentPagerAdapter で 返すデータ数が、実際に3つあっても、 タブで1番目に切り替えを行うまで、FragmentManager の中には、2つしかFragmentが入っていないような動きになっていた。 List<Fragment> datas = getSupportFragmentManager().getFragments(); // 2つだ</fragment>…

knife solo cook 実行時、ERROR: undefined method `cheffish' for nil:NilClass

ubuntu でknife-solo を実行した時に以下のエラーが出た。 ERROR: undefined method `cheffish' for nil:NilClass chef のバージョンが関係しているようだったので、 $ knife solo prepare sample-host -v $ 12.4.1新しいものをインストールした。ところ、問…

AWS EC2 スポットインスタンス 制限緩和のリクエスト

AWS

ケースの作成 左メニューの制限ボタンを押し、 制限緩和のリクエスト を更に押します。CCには、自分のメールアドレスを忘れない。 制限タイプは、スポットインスタンスの項目が無いですが、「EC2インスタンス」を選び、 新しい制限値「200」申請理由の説明に…

nginx Rails Mysql の構成で、アクセス負荷に耐えるためとりあえずやっておくこと

Too many open files nginx (/etc/nginx/nginx.conf) # CPU と同じ数 worker_processes 8; # worker_connections の 4倍程度 # failed (24: Too many open files) に対処できる。 worker_rlimit_nofile 40960; events { # とりあえずこの値 worker_connectio…

Feedlyに開発中のRSSが登録されてしまった場合

消すことは出来ません。 RSS自体のURLを変更し、サイト内のlinkタグを修正すれば、新しいRSSがキャッシュし直されます。

safari 使用時、ActiveAdmin で iframe を入力した文字があると、data:, というページにリダイレクトする

ActiveAdmin のバグです。 ActiveAdmin.register Hoge do controller do before_filter :disable_xss_protection def disable_xss_protection response.headers['X-XSS-Protection'] = "0" end end end こうします。

Whenever の schedule.rb 内の設定を環境ごとに変える

$ bundle exec whenever --update-crontab appname --set environment=productionこのように処理を実行した時、schedule.rb の中では、ENV['RAILS_ENV'] で取得できない。$ config/schedule.rb require File.expand_path(File.dirname(__FILE__) + "/environ…

Ruby で 連想配列を定義しつつ定数も定義する

class Status VALUES = { publish: PUBLISH = 0, pending: PENDING = 1, draft: DRAFT = 2, trash: TRASH = 3, } end このようにアクセスできる Status::PUBLISH Status::VALUES

Capistrano3 でRailsをデプロイするとき、current_path, shared_path などを正しく取得する

$ config/deploy.rb # config valid only for current version of Capistrano lock '3.4.0' set :application, 'hoge' set :repo_url, 'git@bitbucket.org:hoge/hoge.git' # Default value for :scm is :git set :scm, :git # set :rbenv_ruby, '2.2.1' # De…

heroku の Postgres のデータを、独自サーバーの mysql へ転送する

アップロード先 mysqlのサーバー起動 $ gem install taps $ gem install mysql $ taps server mysql://root@localhost/releasenote_stg?encoding=utf8 <basic認証名前> <basic認証パスワード> 5000 番ポートでサーバーが立ち上がります。 サーバーIP アドレスを確認しておく。 コピー元のheroku </basic認証パスワード></basic認証名前>…

Carrierwave で 独自のversion ファイルを保存する

例えば、wav ファイルを 保存したときに、別バージョンとして mp3 も保存するような場合。 version :mp3 do process :convert_mp3 # この名前が、最終的なファイル名になる。 # デフォルトで、 mp3_****.wav になっているので、リネーム def full_filename f…

Sails が pm2 で 起動しない場合

module.exports.models.migrate に、safe, alter, drop いずれかを指定しないと、処理がバックグラウンドで止まり、起動できない。

Sails config の書き方

把握するのに時間がかかったのでメモ。 ./config/* の中身が設定としてロードされる。記載されているルールとしては、例えば log.coffee (log.js) の場合は、 module.exports.log = { hoge: "aaaaa" } module.exports.log までをドットでアクセスして、ファ…

GridViewのCell などのサイズを比率で指定する

GridView は、横幅が自動計算されるため、比率を合わせるには、設定時に計算する必要がある。FrameLayout を入れていた場合は、以下のように onMeasure を オーバーライドし、height を再計算する。 xml の 属性に、layout_height_ratio="0.8" のように指定…

android で view のサイズを取得する

void checkSize (View view) { final Point size = getWindowSize(); // window のサイズを 通知する view.measure (size.x, size.y); // サイズ取得! final int w = view.getMeasuredWidth(); final int h = view.getMeasuredHeight(); } Point getWindowS…

Rails で Base64 エンコードされたデータを Carrierwave で保存する

class Api::FilesController < Api::ApplicationController def create # file = params[:data] data_str = params[:data_str] file = File.new # file.data = data file.data_str = data_str end end class File < ActiveRecord::Base mount_uploader :data…

Cloudn の Object Strage を PHP で S3 の代わりに使用する

composer で S3 の ライブラリを取得する $ curl -sS https://getcomposer.org/installer | php $ vi composer.json { "require": { "aws/aws-sdk-php": "*" } }$ php composer.phar install 利用する $ vi hoge.php

inputAccessoryView が iPhone6 で キーボードにめり込む

Storyboard や、 xib ファイルから viewController を取得し、view を取り出したものを指定すると、表示が崩れる。コード上でUIView や UIButton を生成し、inputAccessoryView に渡す必要がある。

Vagrant up でエラー

Failed to mount folders in Linux guest. This is usually because the "vboxsf" file system is not available. Please verify that the guest additions are properly installed in the guest and can work properly. The command attempted was: mount -…

iOS8 AVPlayerItem を 変更時 アプリが落ちる

Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'An instance 0x17001f8c0 of class AVPlayerItem was deallocated while key value observers were still registered with it. Current observation info: ( Conte…

Google App Engine for Python を使うときは scaffold を使う

scaffold と言っても、rails の scaffold とは何も関係がありません。 Google社製の、簡易フレームワーク(設定ガイドライン)です。google/gae-secure-scaffold-pythonセキュリティの設定や、URLのディスパッチ、フォルダの構成、デプロイスクリプトなどが…

Xamarin Studio 5.3 で APNS に必ず失敗

Xamarin Studio 5.3 の不具合で、以下のコードが必ずエラーになる。 UIRemoteNotificationType notificationTypes = UIRemoteNotificationType.Alert | UIRemoteNotificationType.Badge | UIRemoteNotificationType.Sound; UIApplication.SharedApplication.…

Xamarin.iOS URL Encode 時、+ が残る

WebUtility.UrlEncode ("あい うえお"); こちらを使う System.Uri.EscapeUriString ("あい うえお");

C# で callback を受け付ける 関数を、async await に変換する

C#

void Sample () { Hoge hoge = new Hoge (); hoge.OnSuccess += (sender, e) => { Console.WriteLine ("end"); }; } async Task Sample () { var taskCompletionSource = new TaskCompletionSource<string>(); Hoge hoge = new Hoge (); hoge.OnSuccess += (sender, </string>…

アプリでシェアするために Facebook の申請をする時

審査期間は、今は1週間かからない程度です。 アプリが動く状態になっていなければなりません。 シェア文言にデフォルト文言を入れるのが目的の場合 iOS OS の機能を使ってシェアしてください。 規約違反ですが、問題なくデフォルト文言と画像が設定できます…