Cloud9でRedmineを動かす

これしか話題が無くて申し訳ないのですが、『xxxでRedmineを動かそう』なシリーズ（？）です。

[Cloud9](https://c9.io)は、ご縁のあった [@mitsuruog](https://twitter.com/mitsuruog) さんから教えていただきました。
その名の通り、クラウド上の開発環境です。

通常、コードの修正自体は手元（ローカル）のマシンやMacで行い、稼働やテストの時だけクラウドのサービスを使っているのですが、ささっと新しいフレームワークを試したいなあ...という時に、１から環境を作るのは、なかなか骨が折れる作業です。（どれも試行錯誤したあげく、自分のマシンが汚れてきてしまいます）

## 空のプロジェクトで開始

GitHubのアカウントを利用してサインアップすると、ダッシュボードの左側に、自分のリポジトリ＆お気に入りのリポジトリの一覧が出て来ます。

![cloud9-dashboard.png](https://qiita-image-store.s3.amazonaws.com/0/27976/68b144c7-c36c-a4e4-cc49-de17b15d2a3f.png "cloud9-dashboard.png")



このリポジトリを利用して、ささっと開始...も可能なんですが、私はせいぜいプラグインのソースなので、それ自体での稼働はできないものばかり。

まずは空っぽのプロジェクトで、Redmineのソースを取得するところから始まります。ここは、クラウドのCIツールを使う時と同じ流れです。

### RedmineのClone / bundle install

ログインした直後、rubyのバージョンを確認すると、2.1.1でした。
まずは、単純にbundle installしてみます。

* DBはsqlite3
* rmagickは無し

bundle install をすると、nokogiriのインストールでエラーで止まってしまいます。

```
$ ruby -v
ruby 2.1.1p76 (2014-02-24 revision 45161) [x86_64-linux]

$ git clone -b 2.5-stable https://github.com/redmine/redmine.git
$ cd redmine
$ bundle check || bundle install  --path vendor/bundle --without mysql postgreql rmagick
```

メッセージを見ると、libxsltを入れてという内容。
Cloud9では、シェルに加えてsudoも実行出来るということだったので、試しにapt-getすると、追加が可能でした。
おかげさまで、なんとか続行。

```
$ sudo apt-get  install libxslt-dev
```



### 起動します
bundle installが終わったので、起動の準備です。
まずはDBの設定を編集し、migrationをします。

```
# database.yml（SQLite利用）
$ cat << HERE >> config/database.yml
development:
  adapter: sqlite3
  database: db/development.sqlite3
HERE

bundle exec rake db:migrate
 $ bundle exec rake generate_secret_token
```

あとは、runコマンド（メニュー）があるので、何も考えずに実行。

![cloud9-run.png](https://qiita-image-store.s3.amazonaws.com/0/27976/52341ffc-79d9-890c-bbac-eb81db2101cf.png "cloud9-run.png")

どうやら上がった模様です！

## ブラウザからアクセスする

画面のメッセージには、

```
Your code is running at https://プロジェクト名-c9-ユーザ名.c9.io.
```

というURLで動いてますよ、というメッセージが出ています。
httpsも付けてくれるんですね！

## 異なるブラウザでチェック

手元のブラウザだけではなく、プロジェクトのIDEの画面を通して、Cloud9のデフォルトのブラウザで表示確認ができます。

さらに、加えてSauce Labsの機能を利用して、異なるブラウザでのチェックができます。

![cloud9-redmine.png](https://qiita-image-store.s3.amazonaws.com/0/27976/27297c96-d952-52c2-0077-f95ad693c723.png "cloud9-redmine.png")

![cloud9-browser.png](https://qiita-image-store.s3.amazonaws.com/0/27976/333de359-a8ed-fa38-c86f-ecdeebde1fdc.png "cloud9-browser.png")

クロスブラウザでのチェックは、Cloud9そのものの機能ではなく、Sauce Labsに連携しているため、うっかり上げっぱなしにしていると、Sauce Labsでの無料枠が埋まってしまい、下記のようなメッセージが出てしまうので、ご注意を^^;

```
Your Sauce Labs trial ended!
Please create an account at saucelabs.com,
and login with your account.
```

今回は、上げたままにしてしまっていて、Seleniumでのテストなどができませんでした...。


## たぶんレアケースなトラブル

さて、ひとまず起動まではできました。
が、わたしの場合、アプリケーションのURLの問題で、エラーが出てしまいました。

それは、GitHubを使ってサインアップしたため、"_"(アンダースコア）を含むアカウント名でアプリケーションのURLが設定されたからでした。
下記のようなエラーメッセージが出て、うまくアプリケーションが参照できませんでした...。

```
URI::InvalidURIError
```

こちらは、下記の情報に従って、config/initializers/uri_underscore.rb　で設定をして解決できています...。


http://stackoverflow.com/questions/5208851/is-there-a-workaround-to-open-urls-containing-underscores-in-ruby

## できること / できないこと

まだテストは動かしていませんが、shellが使えるので、普通に自分のローカルな環境と同じようにテストは走らせることができると思います。
また、『おお！』と思ったのが、shellのhistoryだけじゃなくて、エディタ上での編集の履歴も保持しているというところ。

なお、Rubyに関しては、まだIDEを利用してのデバッグはできないようです。

今回は、ブラウザだけで閉じてしまいましたが、自分の端末からsshで操作、というのも試してみようと思います。

## 補足：Cloud9についてのメモ

『開発のための貴重な時間を、環境構築やメンテナンスのために費やす必要はありません。ほんの数秒で、開発のためのフレームワークをビルドしたり実行したり出来ます。メンテナンスは私たち（cloud9)が行い、コントロールするのは、あなたです』...とまあ、素敵なことが書いてあります。（意訳です）

* ワークスペースはdockerのubuntuコンテナ上に展開されます。
* sudoもできます。
* ターミナルやランナーも提供されているので、gitにプッシュしたり、SASSをコンパイルしたり、サーバ上の成果物を確認したり、アプリケーションを実行したりできます。
* ブラウザで操作するだけでなく、各自のマシンからsshでVMにアクセスできます。
* コード編集の履歴を持っていて、過去の編集状況に戻ることができます（これ凄い！）