tezu memo blog

日々行った作業をメモしていきます

【Groovy/Grails Tool Suite and Git】git pullでエラー

別環境でpushしたソースを始めてpullした際にエラーが発生したのでメモ

git勉強しないとダメだなあ


1. pull。エラー発生

The current branch is not configured for pull
No value for key branch.master.merge found in configuration

f:id:tezu35:20130222181109j:plain
 

2. configファイル編集
eclipse 4.2×EGit環境でPush/Pullのハマりどころを回避する | mooappを参考させて頂いた

Window → Open Perspective → Git Repository Exploringを選択
プロジェクトを右クリック → Properties → Openボタンを選択。configファイルが表示される
f:id:tezu35:20130222181243j:plain

[core]
    repositoryformatversion = 0
    filemode = false
    logallrefupdates = true
# 以下を追加
[branch "master"]
    remote = origin
    merge = refs/heads/master
    rebase = true


3. 再度pull。またもやエラー

The current branch is not configured for pull
No value for key remote.origin.url found in configuration

f:id:tezu35:20130222181750j:plain


4. 再度configファイル編集
電脳世界にダイブイン!: GitHub with Eclipseを参考させて頂いた

[core]
    repositoryformatversion = 0
    filemode = false
    logallrefupdates = true
[branch "master"]
    remote = origin
    merge = refs/heads/master
    rebase = true
# 以下を追加
[remote "origin"]
    url = https://github.com/tezu35/grails-ec-admin.git

これでConfigure Fetch from Upstreamメニューが活性状態となる

プロジェクトを右クリック → Team → Remote → Configure Fetch from Upstream → Addボタンを選択
f:id:tezu35:20130222182442j:plain

sourceにmを入力、候補が表示されるのでmaster → Finishボタンを選択
f:id:tezu35:20130222182506j:plain

Save and Fetchを選択
f:id:tezu35:20130222183342j:plain
f:id:tezu35:20130222183408j:plain

 
5. 再再度pull
成功。コンフリクトしてるけど、、
f:id:tezu35:20130222185249j:plain

grails-platform-ui-scaffolding Install package-pluginコマンドでzip作成する必要有

mintsource/grails-platform-ui-scaffolding · GitHub

scaffoldで生成するGSPファイルをGrails Plugin: Plugin Platform UI仕様にするプラグイン
platform-uiのタグに変更するの面倒なので助かる
 

grails install-plugin [name] [version] でインストール不可

Grails central repositoryに登録されてないので、grails install-plugin [name] [version] の指定ではインストール出来ない
http://grails.org/plugins/search?q=grails-platform-ui-scaffolding
f:id:tezu35:20130219164736p:plain
 

GithubのZIPでインストール → 失敗

grails install-plugin [URL/File]でインストール。エラーが発生

$ grails install-plugin https://github.com/mintsource/grails-platform-ui-scaffolding/archive/master.zip

URLはGithubのZIPボタンから取得
f:id:tezu35:20130219163046p:plain

これでインスト出来たら楽なんですけどね、、

コンソールログ

| Loading Grails 2.1.1
| Configuring classpath.
| Environment set to development.....
| Downloading zip https://github.com/mintsource/grails-platform-ui-scaffolding/archive/master.zip. Please wait...
| Downloading zip https://github.com/mintsource/grails-platform-ui-scaffolding/archive/master.zip. Please wait....
| Error Zip /var/folders/k6/ntjhf80x3qd5whnvpntvfbzw0000gn/T/master.6589727975340207458.zip is not a valid plugin

 

ソースコピーでインストール → 失敗

マニュアルを見る限り、ソースコピーでもよさそう
scripts/InstallTemplatesPlatformUIScaffolding.groovyも含めてコピー

Now either:

Manually copy the files from the plugin's /src/templates/scaffolding folder to the root project /src/templates/scaffolding

Or install the grails-platform-ui-scaffolding plugin by referring it via a number of methods described here: http://grails.org/doc/latest/ref/Command%20Line/install-plugin.html

一応、インストールは終わったのでマニュアル通り、プラグインのテンプレートを自作プロジェクトにコピーするコマンドを実行

ファイルを認識しない?

$ grails install-templates-platform-ui-scaffolding

| Loading Grails 2.1.1
| Configuring classpath
| Running pre-compiled script
| Script 'InstallTemplatesPlatformUiScaffolding' not found, did you mean:
   1) InstallTemplatesPlatformUIScaffolding
   2) InstallTemplates
   3) CreateScaffoldController
   4) InstallPlugin
   5) UninstallPlugin

> Please make a selection or enter Q to quit:

マニュアルのtypo。-ui-ではなく-uI-
原因は違うけど再度エラー発生。ソースコピーのインストールは難しそう

$ grails install-templates-platform-uI-scaffolding

| Loading Grails 2.1.1
| Configuring classpath.
| Environment set to development....
| Error Error executing script InstallTemplatesPlatformUIScaffolding: java.lang.NullPointerException: Cannot invoke method getURI() on null object (Use --stacktrace to see the full trace)

 

ソース生成したZIPでインストール → 成功

プラグインのソースからZIPを生成してみる。Grailsのverが2.1.2以外だとエラー

$ pwd
/Users/tezu/Documents/workspace-ggts-3.1.0.RELEASE/grails-platform-ui-scaffolding
$ grails package-plugin
| Application expects grails version [2.1.2], but GRAILS_HOME is version [2.1.1] - use the correct Grails version or run 'grails upgrade' if this Grails version is newer than the version your application expects.

Grails2.1.2をダウンロード&インストール後に再度package-plugin実行。成功!
http://dist.springframework.org.s3.amazonaws.com/release/GRAILS/grails-2.1.2.zip

$ grails package-plugin
| Compiling 11 source files
| Compiling 136 source files
| Compiling 4 source files…
| Plugin packaged grails-grails-platform-ui-scaffolding-0.1.zip

grails install-plugin [URL/File]でインストール。成功!

$ grails install-plugin /Users/tezu/Documents/workspace-ggts-3.1.0.RELEASE/grails-platform-ui-scaffolding/grails-grails-platform-ui-scaffolding-0.1.zip
| Loading Grails 2.1.1
| Configuring classpath.
| Environment set to development.....
| Installing zip grails-grails-platform-ui-scaffolding-0.1.zip.....
| Installed plugin grails-platform-ui-scaffolding-0.1
| Resolving plugin JAR dependencies

テンプレートファイルのコピーも成功。grails-ec-adminがアプリケーション

$ grails install-templates-platform-uI-scaffolding
| Loading Grails 2.1.1
| Configuring classpath.
| Environment set to development....
sourceDir /Users/tezu/.grails/2.1.1/projects/grails-ec-admin/plugins/grails-platform-ui-scaffolding-0.1/.//src/templates/scaffolding
targetDir /Users/tezu/Documents/workspace-ggts-3.1.0.RELEASE/grails-ec-admin/src/templates/scaffolding
| Environment set to development.....
| Platform-UI Scaffolding templates installed successfully

$ pwd
/Users/tezu/Documents/workspace-ggts-3.1.0.RELEASE/grails-ec-admin/src/templates/scaffolding
$ ls -l
total 80
-rw-r--r--  1 tezu36  staff   4059  2 19 14:11 Controller.groovy
-rw-r--r--  1 tezu36  staff   3952  2 19 14:11 Test.groovy
-rw-r--r--  1 tezu36  staff   2189  2 19 14:11 _form.gsp
-rw-r--r--  1 tezu36  staff    989  2 19 14:11 create.gsp
-rw-r--r--  1 tezu36  staff   1519  2 19 14:11 edit.gsp
-rw-r--r--  1 tezu36  staff   2836  2 19 14:11 list.gsp
-rw-r--r--  1 tezu36  staff  11808  2 19 14:11 renderEditor.template
-rw-r--r--  1 tezu36  staff   3591  2 19 14:11 show.gsp

 

動作確認

Domainを生成後(Member)にgenerate-allコマンドでGSPとControllerを作成

$ grails generate-all jp.gr.java_conf.tezu.grails.ec.Member2
| Loading Grails 2.1.1
| Configuring classpath.
| Environment set to development.....
| Packaging Grails application....
| Compiling 1 source files
| Compiling 1 source files.....
| Packaging Grails application.....
| Generating views for domain class jp.gr.java_conf.tezu.grails.ec.Member2
| Generating controller for domain class jp.gr.java_conf.tezu.grails.ec.Member2
| Finished generation for domain class jp.gr.java_conf.tezu.grails.ec.Member2

 
一覧 list.gsp
f:id:tezu35:20130219143923p:plain

新規作成 create.gsp
f:id:tezu35:20130219143929p:plain

詳細 show.gsp
f:id:tezu35:20130219143936p:plain

編集 edit.gspと編集結果
f:id:tezu35:20130219143945p:plain
f:id:tezu35:20130219143949p:plain

削除結果
f:id:tezu35:20130219143956p:plain

これをベースに一覧画面を検索画面に変更するなどのカスタマイズをすれば楽ですね

GA Functions(ver.1.4.2)導入 Hatena Blog

外部リンクのクリックを測定したいので、Google Analyticsにフォーム入力イベントなどを機能拡張するJavaScript「GA Functions」 | murak.netをBlogに導入

jquery.gafunc.jsを改修

理由は以下の通り

  • Hatena Blogが使用しているjQueryは1.9系
<script type="text/javascript" src="http://hatenablog.com/.shared.js:87336cc98b0ace80bdafaed315d585dd:/js/jquery-1.9.0.min.js,/js/empty.js,/js/jquery-ui-1.10.0.custom.min.js,/js/jquery.cookie.js,/js/jquery.hashchange.js,/js/jquery.mousewheel.js,/js/jquery.colorbox-min.js,/js/jquery.flot.js,/js/jquery.ui.datepicker-ja.js,/js/jquery.tipsy.js,/js/jquery.Jcrop.min.js,/js/json2.js,/js/postMessage.js,/js/keyString.js,/js/jsdeferred.js,/js/EditDesign.js,/js/underscore-min.js,/js/fullscreen.js,/js/accesslog.js,/js/base.js,/js/backup.js,/js/admin.js,/js/blogs.js,/js/locale-all.js"></script>
<script type="text/javascript" src="http://hatenablog.com/js/texts-ja.js?87336cc98b0ace80bdafaed315d585dd"></script>


改修しないと当然エラーが発生します。Chrome Developer Toolsで確認

Uncaught TypeError: Object [object Object] has no method 'live' jquery.gafunc.min.js

jquery.gafunc.jsの改修箇所抜粋。live methodをon methodに変更

//  $(q).live('click', function() {
    $(document).on('click', q, function() {
//  $('a[href^="mailto:"]').live('click', function() {
    $(document).on('click', 'a[href^="mailto:"]', function() {
//  $(q.join(',')).live('click', function() {
    $(document).on('click', q.join(','), function() {

 

手順

1. 無料レンタルサーバFree Web Hosting with PHP, MySQL and cPanel, No Ads)にアップロード

ログイン後、Go to CPanelを選択
f:id:tezu35:20130215174509j:plain

File Managerを選択
f:id:tezu35:20130215174552j:plain

/public_html配下にアップロード
f:id:tezu35:20130215174603j:plain


2. Hatena Blogの管理画面でJSを指定
デザイン→カスタマイズ→サイドバー→モジュールを追加→HTMLで追加を選択し、以下をコピー
<script type="text/javascript" src="//tezu.uphero.com/jquery.gafuc.1.9.js"></script>
f:id:tezu35:20130215174925j:plain


3. ブラウザで指定したJSが読み込まれることを確認
f:id:tezu35:20130215175429j:plain
 

結果

コンテンツ→イベント→上位のイベント→イベントカテゴリー Outbound→セカンダリディメンション コンテンツ ページを選択

イベントアクションが外部リンク、ページが遷移元画面

f:id:tezu35:20130218102901j:plain
 

おまけ

livedoor BlogはデフォルトでjQuery未使用なので1.8系を使えばOKです
ブログ設定→カスタムJS→head内タグ

<script type="text/javascript" src="//ajax.googleapis.com/ajax/libs/jquery/1.8/jquery.min.js"></script>
<script type="text/javascript" src="//tezu.uphero.com/jquery.gafunc.min.js"></script>

Grails Platform Core siteNameTagの値はAppのConfig.groovyで変更

軽く苦戦したのでメモ。こんな簡単な変更に苦戦しているようでは悪戦苦闘の日々が続くのだろう、、


siteNameタグのリファレンス抜粋

Renders the name of the site. This is defined in config plugin.platformCore.site.name.

configって何だろ。サンプルコードが欲しい、、


デフォルト値はFile : PlatformCoreGrailsPlugin.groovy - Ohloh Code Searchに記述されている

    def doWithConfigOptions = {
        legacyPrefix = 'grails.plugin.platform'

        'organization.name'(type: String, defaultValue: 'My Corp (set plugin.platformCore.organization.name)')
        'site.name'(type: String, defaultValue: 'Our App (set plugin.platformCore.site.name)')


まずは、Grails Plugin: Plugin Platform CoreをインストールしたPrivate Pluginの<plugin-name>GrailsPlugin.groovyファイルに追加してみたがダメ

def doWithConfigOptions = {
    'organization.name'(type: String, defaultValue: 'My Corp (set plugin.platformCore.organization.name)')
//  'site.name'(type: String, defaultValue: 'Our App (set plugin.platformCore.site.name)')
    'site.name'(type: String, defaultValue: 'Grais EC Admin site.name')
    'plugin.platformCore.site.name'(type: String, defaultValue: 'Grais EC Admin plugin.platformCore.site.name')
    'plugin.grailsEcAdmin.site.name'(type: String, defaultValue: 'Grais EC Admin plugin.grailsEcAdmin.site.name')
}


Grails Plugin: Application Infoをインストールして変数を確認。keyにplugin.grailsEcAdminが付与されている
http://localhost:8080/<app-name>/adminManage/grailsProperties

f:id:tezu35:20130214164335j:plain

key value
plugin.grailsEcAdmin.plugin.grailsEcAdmin.site.name Grais EC Admin plugin.grailsEcAdmin.site.name
plugin.grailsEcAdmin.plugin.platformCore.site.name Grais EC Admin plugin.platformCore.site.name
plugin.grailsEcAdmin.site.name Grais EC Admin site.name
plugin.platformCore.site.name Our App (set plugin.platformCore.site.name)


続いて、Private PluginのConfig.groovyに追加。これもダメ

plugin.platformCore.site.name="Grais EC Admin"


AppのConfig.groovyに追加。これがダメだったら、もう無理

// app-info plugin
grails.plugins.dynamicController.mixins = [
    'com.burtbeckwith.grails.plugins.appinfo.IndexControllerMixin': 'com.burtbeckwith.appinfo_test.AdminManageController',
    'com.burtbeckwith.grails.plugins.appinfo.HibernateControllerMixin': 'com.burtbeckwith.appinfo_test.AdminManageController',
    'com.burtbeckwith.grails.plugins.appinfo.Log4jControllerMixin' : 'com.burtbeckwith.appinfo_test.AdminManageController',
    'com.burtbeckwith.grails.plugins.appinfo.SpringControllerMixin' : 'com.burtbeckwith.appinfo_test.AdminManageController',
    'com.burtbeckwith.grails.plugins.appinfo.MemoryControllerMixin' : 'com.burtbeckwith.appinfo_test.AdminManageController',
    'com.burtbeckwith.grails.plugins.appinfo.PropertiesControllerMixin' : 'com.burtbeckwith.appinfo_test.AdminManageController',
    'com.burtbeckwith.grails.plugins.appinfo.ScopesControllerMixin' : 'com.burtbeckwith.appinfo_test.AdminManageController'
]

plugin.platformCore.site.name="Sample Grails EC Admin"


お!value:Grais EC Adminを認識してる
f:id:tezu35:20130214165658j:plain


TOP画面を表示。footerの値も更新された!
f:id:tezu35:20130214165825j:plain

Grails paginateTag 1ページの行数指定(max)が有効にならない

generate-viewsコマンドで作成したlist.gspに1ページ3行を指定(max=3)

<div class="pagination">
    <g:paginate max="3" total="${memberInstanceTotal}"/>
</div>


有効にならない、、、
paginateのマニュアルに以下の記載があるので、param指定してみる

max (optional) - The number of records to display per page (defaults to 10). Used ONLY if params.max is empty


いけた
http://localhost:8080/sample-grails-ec-admin/member/list?max=3
f:id:tezu35:20130206170429j:plain


create-controllerコマンドで作成したControllerが怪しい
確認してみると

def list(Integer max) {
    params.max = Math.min(max ?: 10, 100)
    [memberInstanceList: Member.list(params), memberInstanceTotal: Member.count()]
}


params.maxに必ず値が代入されるから、tagの値有効にならんでしょ、、、
コメントアウトしたら解決

def list(Integer max) {
//    params.max = Math.min(max ?: 10, 100)
    [memberInstanceList: Member.list(params), memberInstanceTotal: Member.count()]
}