第一回Kakyoin.rb

8月9日 14時から、Kakyoin.rbの一回目のMeetupを片平堂で行います。

内容は、特に決めておらず、集まった人たちでRubyに関する何かをやります。

なお、参加希望は受け付けていません。

事前に声がけした近隣のRubyistの皆様で一杯になってしまったので。

片平堂の事務所は狭いので、6人ぐらいも入ると場所的に限界です。

じゃあ、なんでブログに書いたかといいますと、需要があるのか知りたいなと。

参加希望の需要があるのかとか。

後、会場貸せるよとか、この場所いいよなんて情報が寄せらたりしないかと。

何らかの反応を送りたいという方は、Twitterなりこのブログなり何らかの手段で片平に送りつけてください。

そんな感じで。

Yeomanのgenerator-angularとRailsの組み合わせでの開発環境構築

grunt-connect-proxyを使って、rails server と、grunt serve の2つを叩いてLiveReloadで開発出来るようにしようという話。
あとフロント側をビルドするとRailsのpublicディレクトリに静的ファイルとして配備するように。

RailsのAsset PipelineにAngularJSを載せるんじゃなくて、サーバーサイド(Rails)とクライアントサイド(AngularJS)を分離しての開発の話。

こういう事↓
理想的な Rails, AngularJS 環境の構築 - ボクココ

前提

Railsアプリ作成して、apiのnamespaceでAPIを作成済み、Railsアプリのルートにngappとかディレクトリ作って、yo angular --coffee でフロントエンド部を生成済みとする。*1

作業

% cd ngapp
% npm install -D grunt-connect-proxy
# Gruntfile.coffee

"use strict"

proxySnippet = require('grunt-connect-proxy/lib/utils').proxyRequest
# ↑追加

module.exports = (grunt) ->

  require("load-grunt-tasks")(grunt)

  require("time-grunt")(grunt)

  # Configurable paths for the application
  appConfig =
    app: require("./bower.json").appPath or "app"
    dist: "../public"  # ←修正. railsのpublicをdistに

  # Define the configuration for all the tasks
  grunt.initConfig

  # Project settings
    yeoman: appConfig

# ................................省略.................................

    connect:
      options:
        port: 9000

      # Change this to '0.0.0.0' to access the server from outside.
        hostname: "localhost"
        livereload: 35729

      livereload:
        options:
          open: true
          middleware: (connect) ->
            [
              proxySnippet  #<- 追加
              connect.static(".tmp")
              connect().use("/bower_components", connect.static("./bower_components"))
              connect.static(appConfig.app)
            ]
      proxies: [      #<- proxies: [...] 追加
        context: '/api'
        host: 'localhost'
        port: '3000'
      ]
 
# ................................省略.................................     

  grunt.registerTask "serve", "Compile then start a connect web server", (target) ->
    if target is "dist"
      return grunt.task.run([
        "build"
        "connect:dist:keepalive"
      ])
    grunt.task.run [
      "clean:server"
      "wiredep"
      "concurrent:server"
      "configureProxies"  #<- 追加
      "autoprefixer"
      "connect:livereload"
      "watch"
    ]

# ................................省略.................................   
% bundle exec rails server
% grunt serve

これで、localhost:9000/にアクセスするとフロント側、localhost:9000/apiRailsAPI側に*2
APIとは別に、管理系とかを普通にRailsアプリとして作って同じプロジェクト上にある場合は、Railsのお作法に則り、localhost:3000/下にアクセスでいいと思う。

ビルドは,--forceを忘れずに

grunt build --force

2014/8/23追記

Vagrantの場合↓ Yeomanのgenerator-angularで作ったプロジェクトをVagrant環境で開発する場合の設定 - 仙台 Ruby Vim JavaScript 社長

参考

*1:generator-angular

*2:localhost:9000/apiRailsのrootという意味ではありません

Deviseでnamespace使う場合はdevise_for :users, path: :adminとかしとけという話

メモ。

Devise使用時にroutesでadminとかのnamespaceにdevise_forを入れると,Devise::SessionsController等で authenticate_user! が authenticate_admin_user! とかなってしまう*1

# config/routes.rb
namespace :admin do
  devise_for :users, controllers: {
    sessions: "admin/users/sessions",
    ......
  }
end

devise_for with namespace generate wrong methods · Issue #412 · plataformatec/devise · GitHub

こう書く。

# config/routes.rb
 devise_for :users, path: :admin, controllers: {
    sessions: "admin/users/sessions",
    ......
}

今回は諸事情があってDevise使ってるけど、認証はRails提供のsecure_passwordとか使って、自前で書いたほうがはまらなくていいと思う。大分楽に書けるようになったし。Deviseはカスタマイズしようとすると面倒くさい。

*1:注:カスタムしたコントローラーに任意のアクションを突っ込んでしまっているからです。

Middlemanでgemをvendor/bundleにインストールしたプロジェクトをRubyMine 6.3で開いたらエラーメッセージが出まくってまともに編集できない

こんなメッセージが出まくります。

f:id:yuichi_katahira:20140429145915p:plain

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は表示だけで変更出来ないようになってました。塗りつぶしてるので見えないでしょうけど・・

f:id:yuichi_katahira:20140428103459p:plain

f:id:yuichi_katahira:20140428103707p:plain

末尾にDelete applicationがあるので、クリックして削除。

f:id:yuichi_katahira:20140428103751p:plain

ちなみにクリックしても画面上何も変わらず消えてないのかなと思いましたが、一旦サインアウトしてサインインしなおしたら消えてました。