Middlemanでgemをvendor/bundleにインストールしたプロジェクトをRubyMine 6.3で開いたらエラーメッセージが出まくってまともに編集できない
こんなメッセージが出まくります。
Compass: Failed to run compass on '/Users/my_account/RubymineProjects/slim-test/vendor/bundle/gems/middleman-core-3.3.2/fixtures/sinatra-app/config.rb'
ファイルをちょっと編集するたびにこれが出まくり、しばらくRubyMineから反応が返ってこなくなります。
対処方法を先に書いておくと、vendor/bundleにbundle installしない、RubyMineの古いバージョンを使う、RubyMineではなくほかのもので編集する、あたりです。
で、原因ですが表示メッセージ通りで、Compassがconfig.rbをもとにrunしようとして失敗したのが原因です。
その事自体は正常なことなのですが、問題は、プロジェクトrootだけじゃなくて、vendor/bundle下にある、config.rbも全部探して実行しようとしてしまうというのが原因です。
例えば自分の場合だとちょっと編集するたび59個エラーが出て、反応が返ってこなくなるので、とてもまともには作業できません。
#こういうのに反応してばんばん実行して失敗します vendor/bundle/gems/middleman-core-3.3.2/fixtures/wildcard-directory-index-app/config.rb
あと、設定でCompassを制御するような項目がないので、対処法としては、vendor/bundleにbundle installするのはやめるしかないのかなと。
すでにfix済みで次バージョンで直るようなので、それまでは待ちましょう。 http://devnet.jetbrains.com/thread/453860?tstart=0 http://youtrack.jetbrains.com/issue/RUBY-15160
Bitbucketでリポジトリの移譲を行ったらwerckerに登録したAWSの設定が消えた
昨日エントリーしたBitbucketにpushすると、werckerが自動でS3にデプロイする のやつですが、werckerに登録した自分のリポジトリを、チーム作ってそっちに移譲したら、werckerのサイトで設定したAWSのキーID,シークレット、バケットURLの設定が消えました。
リポジトリのエンドポイントが変わるし、Bitbucketのリポジトリに追加したwerckerbotアカウントの権限も消えていたので、そりゃそうだという話なのですが。
で、さっそく昨日のエントリを見ながら再設定しました。
作業メモ残しておいてよかった事案。
ちなみにwerckerに作ったAPPは多分一回削除して作りなおさないといけないかと。
APPのSettingsみるとリポジトリのURLは表示だけで変更出来ないようになってました。塗りつぶしてるので見えないでしょうけど・・
末尾にDelete applicationがあるので、クリックして削除。
ちなみにクリックしても画面上何も変わらず消えてないのかなと思いましたが、一旦サインアウトしてサインインしなおしたら消えてました。
Bitbucketのプライベートリポジトリで管理しているJekyllで作った静的サイトを、無料のCIサービスwerckerを使って自動でS3にデプロイする
先日S3に移行した片平堂のサイトですが、Jekyll、Bitbucketのプライベートリポジトリ、CIサービスのwerckerを利用して、リポジトリにpushしたら自動でS3に反映するようにしました。
なお、静的サイトジェネレータはMiddlemanとJekyllで迷ったのですが、非プログラマな方も触るので、規約がMiddlemanとくらべてうるさくないと感じたJekyllにしてみました。
ちなみに自分一人だけならMiddlemanを選ぶかなと思いました。
テンプレートもHamlとかSlimとか色々選べますし、Asset Pipelineも使えますし。
触る方のスキルが上がったらMiddlemanに乗り換えるかもしれません。
後、S3にデプロイするためにjekyll-s3 とかありますが、前述の通り、デプロイ作業をするのが一人ではないので、CIを使ってみました。
手順としては以下のような感じで進めました。
スタート,既存サイトのHTML(VCS未使用,Cyberduckで手動でS3にアップロードしていた)
↓
Jekyll使用に移行
↓
Jekyll使用にしたものをBitBucketに登録
↓
werckerにユーザ登録,Bitbucketの該当リポジトリを登録
↓
Bitbucketにpushしたらwerckerでbuild出来る所まで設定、テストする
↓
werckerのS3へのデプロイ情報を設定
↓
buildしたものをS3にデプロイできる事を確認
既存サイトをJekyllに移行
4ページ程度のサイトで動的な部分もないのでこの作業は簡単でした。
既存サイトのディレクリでGemfileを用意。
# Gemfile source 'http://rubygems.org' gem 'jekyll' gem 'redcarpet'
bundle installします。
% bundle install --path vendor/bundle
build時に、Gemfile,vendorなどが含まれないように_config.ymlを用意して設定。
# _config.yml name: 片平堂 markdown: redcarpet pygments: true exclude: ["vendor", "Gemfile", "Gemfile.lock"]
一度問題なく生成できるか確認。
% bundle exec jekyll serve --watch
OKだったので、レイアウトを使用するように。
% mkdir _layouts
default.html用意
<!- _layouts/default.html-> <!DOCTYPE html> <html> <head lang="jp"> <meta charset="UTF-8"> <title>{{page.title}} - {{site.name}}</title> </head> <body> {{content}} </body> </html>
各ページにYAML Front Matterを追加、レイアウト使用に合わせて修正
<!- index.html-> --- layout: default title: ホーム --- <div> some content </div>.....
フッター部を部品化。
% mkdir _includes
footer.htmlを用意
<!- _includes/footer.html-> <div id="footer"> (C) 2007 Katahirado. </div>
default.htmlにフッターの読み込みを追加
<!- _layouts/default.html-> <!DOCTYPE html> <html> <head lang="jp"> <meta charset="UTF-8"> <title>{{page.title}} - {{site.name}}</title> </head> <body> {{content}} {% include footer.html %} </body> </html>
Bitbucketに登録
Gitのプライベートリポジトリを無料で使いたかったのでBitbucketにしました。
Bitbucketにユーザ登録してなかったら登録して、サイト用のプライベートリボジトリを作成します。
ssh公開鍵などよしなに。
後はJekyllに移行したサイトディレクトリでいつものように*1。
% git init
% git add .
% git commit -m 'initial commit'
% git remote add origin git@bitbucket.org:bitbucket_account/bitbucket_repository.git
% git push -u origin master
SourceTreeを使うのもよいかと。
wercker
参考
- http://blog.wercker.com/2013/05/31/simplify-you-jekyll-publishing-process-with-wercker.html
werckerに登録
werckerにいってRegister for freeをクリック
REGISTER WITH GITHUBを選択。
githubアカウントで登録してみました。
スクリーンショット撮り忘れました。
後はアカウント名とメールアドレスを入れてフィニッシュするだけなのでよしなにしてください。
Bitbucketの該当リポジトリを登録
Add an applicationをクリック
use Bitbucketをクリック
該当リポジトリを選択して、Use selected repoをクリック
Bitbucketにpushしたらwerckerでbuild出来る所まで設定、テストする
Add werckerbotをクリック
Bitbucketのリポジトリのアクセス管理画面が開くので、先ほどの説明文通り、werckerbotアカウントを書き込み可能な権限で追加します。
werckerに戻ってNextをクリック
wercker.ymlを作成せよといってますが後で作りますので、Nextをクリック。
ちなみにすでにwercker.ymlをこの時点ですでに作成してリポジトリにアップしている場合、こんな感じになります。
Create applicationをクリック
追加がとりあえず完了。
ローカルでwercker.ymlを作成します。
bundle installしてjekyll buildして_siteを作成するという内容です。
# our build should run within a Ruby box box: wercker/ruby build: steps: # Run a smart version of bundle install # which improves build execution time of # future builds - bundle-install # A custom script step # that actually builds the jekyll site - script: name: generate site code: bundle exec jekyll build --trace
wercker.ymlがbuildされないようにexcludeに追加します。
name: 片平堂 markdown: redcarpet pygments: true exclude: ["vendor", "Gemfile", "Gemfile.lock","wercker.yml"]
Bitbucketにpushしたら、werckerでbuild出来るか実際にpushしてみます。
% git add wercker.yml
% git commit -m 'add wercker.yml'
% git push origin master
成功しました。
werckerのS3へのデプロイ情報を設定
SettingsのDeploy targetsでAdd deploy targetのCustom deployを選択します。
Deployのターゲットネームとレポジトリを設定。
AWS のアクセスキーID,シークレットアクセスキー,bucketのURLを設定していきます。
なお、AWSのシークレットアクセスキーについてはこちらの記事の件にも留意。
Add new variableをクリック
キーID用の変数名と実際の値を設定します。
続いてシークレット
バケットのURL
こんな感じになります。
wercker.ymlにs3デプロイの設定を追加します。
# our build should run within a Ruby box box: wercker/ruby build: steps: # Run a smart version of bundle install # which improves build execution time of # future builds - bundle-install # A custom script step # that actually builds the jekyll site - script: name: generate site code: bundle exec jekyll build --trace deploy: steps: - s3sync: key_id: $KEY key_secret: $SECRET bucket_url: $URL source_dir: _site/
buildしたものをS3にデプロイできる事を確認
% git add wercker.yml
% git commit -m 'Add deployment section'
% git push origin master
Build OK.
S3へのDeploy OK.
感想、その他
自動化するために、自前で用意するものが減って大変便利。
werckerがいつまで無料なのかわかりませんが、無料でここまで出来てありがたい限り。
Middlemanでも同様な感じで設定出来ます。
以上。
*1:実際にはJekyllのレイアウト化の前にローカルのgit使用でバージョン管理していたのですが、話を簡略化
Google フォームから入力された内容をメール送信する
前に Google ドキュメントで作成したWEBフォームに問い合わせがあったら、内容をメール送信する機能を追加する という記事を書いたのですが、 2014年4月25日現在、Google フォームを作成すると、フォームとその回答用のスプレッドシートが別に作成されるように変わっていました。
過去記事ではスプレッドシートにトリガーを追加していましたが、フォームにトリガーを追加するほうがスクリプトがシンプルになって良さそうでしたので、やり方をメモ。
で、すでに親切丁寧な記事を書いていらした方がいたので、そちらを参照にすると良いかと思います。
http://jmatsuzaki.com/archives/11545
それだけではアレなので、自分のスクリプトも晒しておきます。
自分の使い道は、フォームから入力された内容を自分宛てに送信するという用途なので、ccやbccを使わないシンプルな内容です。
入力項目を全部表示させるだけなら、カラムの名前に依存しなくていいので、過去記事のスクリプトより短くなっています。
function sendForm(e){ // 件名、本文 var subject = "[片平堂HPからの問い合わせ]"; var body = "問い合わせ内容\n------------------------------------------------------------"; // メール送信先 var to = "xxxxx@xxxx.xx"; var itemResponses = e.response.getItemResponses(); for (var i = 0; i < itemResponses.length; i++) { var itemResponse = itemResponses[i]; body += '\n\n['+itemResponse.getItem().getTitle()+']\n\n'; body += itemResponse.getResponse(); } MailApp.sendEmail({to:to,subject:subject, body:body}); }
他、トリガー追加時に起動失敗の通知を追加しています。
通知をクリック。
通知タイミングはimmediatelyにしました。
エラーはこんな感じで届きます。
送信されるメールは以下の様な感じになります。 お名前、メールアドレス、内容という項目でフォームを作成した場合です。
2014/4/25追記: Google Appsでフォームを作成して全体に公開する場合は、フォーム設定の下記のチェックを外しましょう。
RubyMineやWebStormで勝手に行末尾の空白を消されないようにする
RubyMineやWebStormで、README.md等のMarkdown記法のスペース2個を消されてしまわないようにする設定のメモ。
RubyMineやWebStormはあまりカスタマイズしないで使っていて、バージョン上げても設定を引き継がないようにしているので、バージョン上げるたびにどこで設定するのか忘れてしまっているので記録。
Settings > Editor と開いて Other の項目にある Strip trailing spaces on Save を None に設定する。
Rails 4.0.4 から 4.1.0 に Update
こんな感じに作業。
↓
https://github.com/katahirado/kkfoodstuff/commit/7aca5b2986e26e88a78d7d58bc041ed97cba5e9e
https://github.com/katahirado/kkfoodstuff/commit/a0c49840145587336b52cb2d56ba71f1dda1e84c
Warning: you should require 'minitest/autorun' instead. Warning: or add 'gem "minitest"' before 'require "minitest/autorun"'
shoulda-matchersを2.5から2.6に
gem "shoulda-matchers", "~> 2.6.0"
参考
VPSからAmazon S3とGoogle Apps for Businessに移行しました
さくらのVPSで運用していたkatahirado.jp(VALUE DOMAINで取得)を、WebサイトはAmazon S3に、メールはGoogle Apps for Businessにそれぞれ移行しました。
Webサイト、メールサーバの他に、redmine、git、Railsのデモアプリが動いていましたが、
git,redmineはgithubやPivotal Tracker等を使用することにして、既存のデータはとりあえずローカル(MBP)に。
Railsアプリのデモは動かすならHerokuかなと思っていますが、一旦保留としました。
S3とRoute 53,Google Appsでの作業をメモ。
Amazon S3
katahirado.jpはルートドメインでの静的なWebサイトなので、Amazon Route 53を使ってホストする必要がありました。
Amazon S3でのWebサイトですが、基本こちらの通りで。
- http://gatespace.jp/2013/03/05/aws-s3-static-site/
- http://aws.typepad.com/aws_japan/2012/12/root-domain-website-hosting-for-amazon-s3.html
www.katahirado.jpと、karahido.jpのバケットを作成しました。
なのですが、バケットポリシーを追加する時に、AWS Sample Bucket PolicyのWebページが丁度なくなっていたので、AWS Policy Generatorを利用してバケットポリシーを作成しました。*1
Sample Bucket Policiesをクリックするとページがなくなってました。
AWS Policy Generatorをクリック。
Select Type of PolicyをS3 Bucket Policyにして、Principalを*に。
ActionsでGetObjectにチェック。
Amazon Resource Name (ARN)のところはご丁寧に formatが乗っているので、それに合わせて入力しました。
arn:aws:s3:::<bucket_name>/<key_name>
↓
arn:aws:s3:::www.katahirado.jp/*
Add StatementしてGenerate Policyして表示されたものをコピーして貼り付ければOK
Amazon Route 53
Amazon Route 53でDNSの設定をします。ここいらを参考に。
- http://www.keygoal.jp/?p=399
- http://pocketstudio.jp/log3/2012/03/31/migrationg_an_existing_domain_to_route53/
Create Hosted Zoneして出来たNS,SOA以外にkatahirado.jpのA,www.katahirado.jpのCNAMEを追加。
MXレコードはGoogle Apps for Businessがまだ処理し終わっていないので、まだ登録しません。
というか出来ません。
VALUE DOMAINの管理コンソールにいってNSのValueをネームサーバとして登録。
なお、メール等のダウンタイムを極力なくすという意味ではAmazon Route 53→Google Apps for Business→S3とかの流れの方が良かった気がします。
ちなみにGoogle Apps for Businessでの処理で若干手間取って、30分ぐらいメールサーバー的にアレになってたかと。
Google Apps for Business
次、Google Apps for Businessを独自ドメインで設定。
以下が大変丁寧。
Google Apps for Businessのドメイン所有権の確認、MXレコード登録の流れで、Google AppsとAmazonを行ったり来たりして若干混乱したので流れを整理。
Google Apps for Businessの無料トライアル申し込み
↓
ドメイン所有権の確認(Google Apps for Business)
↓
Google Appsの管理コンソールからTXTレコードに設定する値を取得する
↓
Amazon Route53のコンソールで取得したTXTレコードを登録
↓
ドメインの所有権確認終了(Google Apps for Business)
↓
Google Appsの管理コンソールからMXレコードに設定する値を取得する
http://angelndxp.wordpress.com/2012/05/27/amazon-route53%E3%82%92google-apps%E3%81%AEdns%E3%82%B5%E3%83%BC%E3%83%90%E3%83%BC%E3%81%A8%E3%81%97%E3%81%A6%E5%88%A9%E7%94%A8%E3%81%99%E3%82%8B-%EF%BD%9E%E7%8B%AC%E8%87%AA%E3%83%89%E3%83%A1%E3%82%A4/
↓
Amazon Route53のコンソールでMXレコードの設定を行う
http://angelndxp.wordpress.com/2012/05/28/amazon-route53%E3%82%92google-apps%E3%81%AEdns%E3%82%B5%E3%83%BC%E3%83%90%E3%83%BC%E3%81%A8%E3%81%97%E3%81%A6%E5%88%A9%E7%94%A8%E3%81%99%E3%82%8B-%EF%BD%9E%E3%83%A1%E3%83%BC%E3%83%AB%E8%BB%A2%E9%80%81/
↓
MXレコードの設定反映完了(Google Apps for Business)
感想
若干手間取りましたが、がっちりサーバを構築するのに比べるとだいぶお手軽。
クラウドもずいぶん環境整ったなとしみじみ。
サーバ運用を自宅サーバ→VPSで長いこと続けてきましたが、もうクラウドでいいですね。
追記: 料金はさくらのVPSが年間一括払いだったので、月924円(4/18現在)。
Google Apps for Businessが年払いで一人利用なので、月500円、AWSは運用してみないとわかりませんが、Route 53は1ゾーンで、S3も大したアクセスでもないので両方で多分200円以内、合わせてもVPSより安くなるかなと想定しています。
*1:一時的な問題だったようで作業翌日には復活していました