VirtualBOX+Vagrant+Ansibleで開発環境を作る その1
こちらの記事を参考にAnsibleを動かしてみたいと思います。
↑の記事は仮想サーバを2本立てて一方をcontroller、もう一方をtargetとしていますが、今回はtargetだけ仮想でたてて、Macをコントローラとして動かしたいと思います。
事前準備
- Vagrant 2.0.3
- VirtualBox 5.2.8r121009
- ansible 2.5.0
VagrantとVirtualBoxはサイトからdmgをDL/ansibleはbrew installしました。 ansibleの導入にはpython 2.6+なのですが、私のmacにはPython 2.7.10が入ってたのでそのまま進めます。
仮想サーバtargetを作成します。
% mkdir vagrant % cd vagrant % vagrant init
vagrantfileが生成されるので、targetサーバの情報を書き込みます。OSはCentOS7にしました。
Vagrant.configure(2) do |config|
config.vm.define "target" do |node|
node.vm.box = "centos/7"
node.vm.hostname = "target"
node.vm.network :private_network, ip: "192.168.100.20"
node.vm.network :forwarded_port, id: "ssh", guest: 22, host: 2220
end
end
起動します。
% vagrant up
これだけ。めっちゃ早い。 sshで疎通を確認しますが、まあ通りません。認証エラーです。 Vagrant 1.7以降、vagrant up 時に旧来の insecure_key を検知した場合、その仮想マシン用の別の鍵ペアを生成して insecure_key を置き換える仕様になったそうです。
Windowsでvagrant upした後にsshログインする方法 · DQNEO起業日記
こちらの記事の通り、sshログイン情報は"vagrant ssh-config"コマンドを叩くと教えてくれるので、設定された情報を元にsshが通ることを確認します。
ansible疎通
対象ホストをまとめて記述したinventoryファイルを作り、ハンズオンのPlaybookを試してみます。 SSHはssh configを参照するように設定したので、inventory/hosts にはssh configで設定したホスト名で記述します。 試してみる、のtest.ymlの中身もuserを書き換えます。
■ssh config
Host vag.tst Hostname 192.168.100.20 User vagrant IdentityFile ~/workspace/vagrant/.vagrant/machines/target/virtualbox/private_key
■inventory/hosts
[targets] vag.tst
■test.yml
- hosts: targets
user: vagrant ←
tasks:
- name: output message.
debug: msg="{{ message }}"
- name: output fruits
debug: msg="We want {{ item.value.amount }} {{ item.key }} !"
with_dict: "{{ fruits }}"
Ansibleをもう少し試す
ハンズオン通り下記のPlaybook(main.yml)を実行してみます。( jqだけEPELリポジトリを追加してそちらから取得しないといけないのでいったん削除)
- hosts: targets
user: vagrant
tasks:
- name: install packages from yum
yum: name={{ item }} state=latest
with_items:
- ruby
- httpd
- name: register cron job
cron: name="check ping" day="*/2" hour="12" minute="0" job="ping -c 3 192.168.100.10"
- name: create directories
file: path={{ item.path }} owner={{ item.owner }} group={{ item.group }} mode=0{{ item.mode }} state=directory
with_items:
- { "path":"/opt/ansible", "owner":"root", "group":"root", "mode":"755" }
- { "path":"/opt/vagrant", "owner":"vagrant", "group":"vagrant", "mode":"755" }
- name: copy files
copy: src=./files/hoge dest=/opt/ansible/hoge owner=root group=root mode=0755
- name: copy template files
template: src=./templates/fuga.j2 dest=/opt/ansible/fuga owner=root group=root mode=0755
↓結果↓
% ansible-playbook -i inventory/hosts main.yml
PLAY [targets] *********************************************************************************
TASK [Gathering Facts] *************************************************************************
ok: [vag.tst]
TASK [install packages from yum] ***************************************************************
failed: [vag.tst] (item=[u'ruby', u'httpd']) => {"changed": true, "item": ["ruby", "httpd"], "msg": "You need to be root to perform this command.\n", "rc": 1, "results": ["Loaded plugins: fastestmirror\n"]}
to retry, use: --limit @/Users/username/workspace/ansible/main.retry
PLAY RECAP *************************************************************************************
vag.tst : ok=1 changed=0 unreachable=0 failed=1
yumを実行するためにルートユーザにならないとダメそうです。Playbook(main.yml)を修正
- hosts: targets user: vagrant become: yes ←タスクすべてをsudoで実行する tasks: (後略)
↓結果↓
% ansible-playbook -i inventory/hosts main.yml
PLAY [targets] *********************************************************************************
TASK [Gathering Facts] *************************************************************************
ok: [vag.tst]
TASK [install packages from yum] ***************************************************************
changed: [vag.tst] => (item=[u'ruby', u'httpd'])
TASK [register cron job] ***********************************************************************
changed: [vag.tst]
TASK [create directories] **********************************************************************
changed: [vag.tst] => (item={u'owner': u'root', u'path': u'/opt/ansible', u'group': u'root', u'mode': u'755'})
changed: [vag.tst] => (item={u'owner': u'vagrant', u'path': u'/opt/vagrant', u'group': u'vagrant', u'mode': u'755'})
TASK [copy files] ******************************************************************************
changed: [vag.tst]
TASK [copy template files] *********************************************************************
changed: [vag.tst]
PLAY RECAP *************************************************************************************
vag.tst : ok=6 changed=5 unreachable=0 failed=0
成功しました!タスクごとにbecomeを設定することもできるらしいので開発環境作るときはもうちょっとちゃんとやる。
[vagrant@target ~]$ ruby -v
ruby 2.0.0p648 (2015-12-16) [x86_64-linux]
[vagrant@target ~]$ httpd -v
Server version: Apache/2.4.6 (CentOS)
Server built: Oct 19 2017 20:39:16
[vagrant@target ~]$ sudo yum history info 2
Loaded plugins: fastestmirror
Transaction ID : 2
Begin time : Fri Apr 6 07:12:11 2018
Begin rpmdb : 303:0b438f896414e3740ba8650a5ae32eb0794477ba
End time : 07:12:14 2018 (3 seconds)
End rpmdb : 318:c8dd1f6f94f41a558ed062c2fc3ce0f4d0411ec9
User : vagrant <vagrant>
Return-Code : Success
Command Line : -d 2 -y install ruby httpd
Transaction performed with:
Installed rpm-4.11.3-25.el7.x86_64 @anaconda
Installed yum-3.4.3-154.el7.centos.1.noarch @koji-override-1
Installed yum-plugin-fastestmirror-1.1.31-42.el7.noarch @anaconda
Packages Altered:
Dep-Install apr-1.4.8-3.el7_4.1.x86_64 @updates
Dep-Install apr-util-1.5.2-6.el7.x86_64 @base
Install httpd-2.4.6-67.el7.centos.6.x86_64 @updates
Dep-Install httpd-tools-2.4.6-67.el7.centos.6.x86_64 @updates
Dep-Install libyaml-0.1.4-11.el7_0.x86_64 @base
Dep-Install mailcap-2.1.41-2.el7.noarch @base
Install ruby-2.0.0.648-33.el7_4.x86_64 @updates
Dep-Install ruby-irb-2.0.0.648-33.el7_4.noarch @updates
Dep-Install ruby-libs-2.0.0.648-33.el7_4.x86_64 @updates
Dep-Install rubygem-bigdecimal-1.2.0-33.el7_4.x86_64 @updates
Dep-Install rubygem-io-console-0.4.2-33.el7_4.x86_64 @updates
Dep-Install rubygem-json-1.7.7-33.el7_4.x86_64 @updates
Dep-Install rubygem-psych-2.0.0-33.el7_4.x86_64 @updates
Dep-Install rubygem-rdoc-4.0.0-33.el7_4.noarch @updates
Dep-Install rubygems-2.0.14.1-33.el7_4.noarch @updates
history info
aws-mobile-react-native-starter day01
引き続きReactNativeの実装のサンプルにトライしてみようと思います。 今回はこちらに従って作業。
MobileHubセットアップ
プロジェクトを作成しようとすると権限でエラーが発生します。
Failed to create Mobile Hub Service Role. Sorry, but you do not have permission for this operation. For help, see http://docs.aws.amazon.com/mobile-hub/latest/developerguide/managed-policies.html. Details = User: arn:aws:iam::650593974448:user/kabe is not authorized to perform: mobilehub:CreateServiceRole on resource: arn:aws:iam::650593974448:role/MobileHub_Service_Role
たしかに、ログインしているユーザにアタッチしたAWSMobileHub_FullAccessにはmobilehub:CreateServiceRoleがセットされてない。どこにあるんだよこれ。
調べてみたのだけどグループにアタッチできるポリシーの中ではこの権限が付与されているものはなさそう。
仕方がないからカスタムでAllowしようとしたら、ARNが必要で書き込みできない。MobileHubのARNの形式はarn:aws:mobilehub:region:account-id:project/projectIDだから、…だからそのProjectを作るために権限が足りないんだって言ってんじゃん(´;ω;`)

調べてみてもなぜAWSMobileHub_FullAccessにCreateServiceRoleの権限が与えられていないのかは謎でした。何か理由があるのかな??教えて欲しいな。
止まっていても仕方がないのでプロジェクトのインポートだけ、ルートユーザでログインして実行します。
reactnative-starterというプロジェクトはもうあるから作れないよー!というエラーが出る(AWSこのパターン多いな…作業途中でエラーになって終わらなかったのが管理画面から見えないところで残ってるのどうにかなんないの???)のでreactnative-starter01とかで数分でできあがり。
無事aws-exports.jsを入手できたので、ローカルにnode.jsの開発環境を構築していこうと思います。
node.jsセットアップ
こちらに従って環境を構築しました。特に大きな問題なく。
途中nodebrew install-binary latestするときだけ、フォルダがないよと怒られるので、自分でフォルダ掘っておけば通る。
あとシャチョさんのオススメでbashではなくzshを使っているので、実行パスは.bashrcではなく.zshrcに書くこと(ハマった)
さて、手順に戻ってアプリの実行を試していきます。
npm install で必要なパッケージのダウンロード > npm startまでは問題なくできました。が、react-nativeインストールしてねぇな???
react-nativeセットアップ
ホントQiitaがなかったら心折れてる。
指示通りwatchman,flow,React Nativeをインストールします。
$ brew install watchman $ brew install flow $ npm install -g react-native-cli
特になんの問題もなく(‘ω‘ )
$ watchman -v 4.9.0 $ flow version Flow, a static type checker for JavaScript, version 0.61.0 $ react-native -v react-native-cli: 2.0.1
aws-mobile-react-native-starter アプリの実行
指示通りnpm startでサーバを起動して、別のターミナルからiOSシミュレータを起動してみます。
$ react-native run-ios Scanning 740 folders for symlinks in /Users/k-abe/Desktop/aws-mobile-react-native-starter-master/client/node_modules (8ms) Found Xcode project awsmobilereactnativesample.xcodeproj xcrun: error: unable to find utility "instruments", not a developer tool or in PATH Command failed: xcrun instruments -s xcrun: error: unable to find utility "instruments", not a developer tool or in PATH
うむむ、XcodeのCommand line toolsをみつけられないっぽい??
Xcode > Preference > Locations でコマンドラインツールが指定されてなかったので設定します。

起動したー!!!

Ruby Sample for AWS Cloud9 day2
先日のgemの置き場の件、
sudoしないでgem installし直したら治った。なんなのよ(´;ω;`)
これ、rvmさんのサイト見たら
RVM: Ruby Version Manager - Sudo Integration with RVM
By default, when you use sudo your current shell environment is not passed through to the session created by it, but RVM already allows for easier access to sudo calls with rvmsudo.
となっていて、
RVM+sudoで`sudo: gem: command not found`とか言われたら`rvmsudo`を使えばいいらしいよ。 | Ginpen.com
sudoはシェルを改めて開始するためrvm useされてない状態になるから駄目、という事らしい。その点rvmsudoはRVM+Rubyを使うための環境変数をちゃんと設定してくれるそうだ。
ということらしい。AWSSampleのチュートリアル手順、rvmsudoに直したほうが良いのでは??って思った。
閑話休題。
Step 6: Run the AWS SDK Code
再開します。
http://docs.aws.amazon.com/cloud9/latest/user-guide/credentials.html
ん?ちゃんと読んでなかったけど、
If you are using an EC2 environment, you can skip the rest of this topic, as AWS managed temporary credentials are already set up for you in the environment.
って書いてません??書いてません…???
Access Permissions Reference for AWS Cloud9 - AWS Cloud9
指示に従ってPreferences開くと警告が出ました。

Force UpdateしてPreferences>AWS Settings>Credentialsを確認。

ONになっていたので、もう一度手順通りRun the AWS SDK Codeしてみます。

通った!!
が、bucketあるって言われてコケますね。ないんだけどなぁ。

Step 7: Clean Up
これはenvironmentを削除するだけ。簡単。
なぜかいろいろ試行錯誤してしまったので、もう一度通してやり直して見ようと思いますが、いったん一通り動いたぞ(๑•̀ㅂ•́)و✧。
Ruby Sample for AWS Cloud9
「そもそもAWS Cloud9、Ruby on Railsサポートしてないんじゃない?テンプレ消えてない??」
って言われたので方向転換してとりあえずAWS Cloud9上でRubyを動かしてみようと思います。
トライするのはこれ。 docs.aws.amazon.com
Step 1: Install Required Tools
kabe:~/environment $ ruby --version ruby 2.4.1p111 (2017-03-22 revision 58053) [x86_64-linux]
Rubyは入ってるので(知ってる)、yumの最新化だけしとく。
Step 2: Add Code

Step 3: Run the Code
普通にうごくね。
Step 4: Install and Configure the AWS SDK for Ruby
AWS SDK for RubyをつかってAWSの他のサービスを操作してみる。
まずはAWS SDK for Rubyのインストール
kabe:~/environment $ gem --version 2.6.14 kabe:~/environment $ sudo gem install aws-sdk Fetching: jmespath-1.3.1.gem (100%) 〜中略〜 135 gems installed
スムーズにすすむ(´;ω;`)
ここで他のAWSサービスを操作するための権限設定をしなくてはならないのでIAMコンソールに移動。
After you install the AWS SDK for Ruby, you must set up credentials management in your environment. The AWS SDK for Ruby needs these credentials to interact with AWS services.
Create and Use an Instance Profile to Manage Temporary Credentials
To create an instance profile
Cloud9はEC2でいいのかな???

To attach an instance profile to an instance
Cloud9のEC2インスタンスにさっき作ったRoleをアタッチする
Cloud9に戻ってaws configureを実行
kabe:~/environment $ aws configure AWS Access Key ID [****************R27Q]: AWS Secret Access Key [****************WYVB]: Default region name [ap-southeast-1]: ap-southeast-1 Default output format [None]:
Step 5: Add AWS SDK Code
Roleの設定ができたのでRuby Sampleに戻ります。
YOUR_REGIONを環境に合わせて書き換えるの忘れないで。

Step 6: Run the AWS SDK Code
Oh...エラー出ちゃった…
どうもさっきインストールしたaws-sdkにパスが通ってない??
aws-sdk自体は/usr/local/share/ruby/gems/2.0/gemsにインストールされている模様
kabe:~/environment $ gem env
RubyGems Environment:
- RUBYGEMS VERSION: 2.6.14
- RUBY VERSION: 2.4.1 (2017-03-22 patchlevel 111) [x86_64-linux]
- INSTALLATION DIRECTORY: /usr/local/rvm/gems/ruby-2.4.1
- USER INSTALLATION DIRECTORY: /home/ec2-user/.gem/ruby/2.4.0
- RUBY EXECUTABLE: /usr/local/rvm/rubies/ruby-2.4.1/bin/ruby
- EXECUTABLE DIRECTORY: /usr/local/rvm/gems/ruby-2.4.1/bin
- SPEC CACHE DIRECTORY: /home/ec2-user/.gem/specs
- SYSTEM CONFIGURATION DIRECTORY: /usr/local/rvm/rubies/ruby-2.4.1/etc
- RUBYGEMS PLATFORMS:
- ruby
- x86_64-linux
- GEM PATHS:
- /usr/local/rvm/gems/ruby-2.4.1
- /usr/local/rvm/gems/ruby-2.4.1@global
- GEM CONFIGURATION:
- :update_sources => true
- :verbose => true
- :backtrace => false
- :bulk_threshold => 1000
- REMOTE SOURCES:
- https://rubygems.org/
- SHELL PATH:
- /home/ec2-user/.nvm/versions/node/v6.11.4/bin
- /usr/local/rvm/gems/ruby-2.4.1/bin
- /usr/local/rvm/gems/ruby-2.4.1@global/bin
- /usr/local/rvm/rubies/ruby-2.4.1/bin
- /usr/local/bin
- /bin
- /usr/bin
- /home/ec2-user/.local/bin
- /home/ec2-user/bin
- /usr/local/sbin
- /usr/sbin
- /sbin
- /opt/aws/bin
- /usr/local/rvm/bin
- /home/ec2-user/.local/bin
- /home/ec2-user/bin
- /home/ec2-user/.local/bin
- /home/ec2-user/bin
kabe:~ $ which gem
/usr/local/rvm/rubies/ruby-2.4.1/bin/gem
そうだよねぇ…そこにないもんねぇ。なんで違うとこにインストールされちゃったのかな。
いったんPATH通してみる。
kabe:~/ $ export RUBYLIB=/usr/local/share/ruby/gems/2.0/gems kabe:~ $ source .bashrc function
うーん、ダメでした。そもそもrvmで管理してるgemの置き場所じゃないところにaws-sdkをインストールしちゃってるのがダメなのかな??
てかINSTALLATION DIRECTORYにインストールされるはずなんだけど、なんで違うとこに入っちゃうの??
kabe:~ $ gem install aws-sdk 〜略〜 kabe:~ $ find /usr/local/ -name "aws-sdk-s3-1.8.0*" /usr/local/share/ruby/gems/2.0/specifications/aws-sdk-s3-1.8.0.gemspec /usr/local/share/ruby/gems/2.0/cache/aws-sdk-s3-1.8.0.gem /usr/local/share/ruby/gems/2.0/gems/aws-sdk-s3-1.8.0 /usr/local/share/ruby/gems/2.0/doc/aws-sdk-s3-1.8.0 /usr/local/rvm/gems/ruby-2.4.1/specifications/aws-sdk-s3-1.8.0.gemspec /usr/local/rvm/gems/ruby-2.4.1/cache/aws-sdk-s3-1.8.0.gem /usr/local/rvm/gems/ruby-2.4.1/gems/aws-sdk-s3-1.8.0 /usr/local/rvm/gems/ruby-2.4.1/doc/aws-sdk-s3-1.8.0
sudoしないでgem installし直したら治った。なんなのよ(´;ω;`)
/usr/local/rvm/gems/ruby-2.4.1/gems/aws-sdk-core-3.11.0/lib/seahorse/client/plugins/raise_response_errors.rb:15:in `call': The AWS Access Key Id you provided does not exist in our records. (Aws::S3::Errors::InvalidAccessKeyId)
from /usr/local/rvm/gems/ruby-2.4.1/gems/aws-sdk-s3-1.8.0/lib/aws-sdk-s3/plugins/sse_cpk.rb:22:in `call'
from /usr/local/rvm/gems/ruby-2.4.1/gems/aws-sdk-s3-1.8.0/lib/aws-sdk-s3/plugins/dualstack.rb:26:in `call'
from /usr/local/rvm/gems/ruby-2.4.1/gems/aws-sdk-core-3.11.0/lib/aws-sdk-core/plugins/jsonvalue_converter.rb:20:in `call'
from /usr/local/rvm/gems/ruby-2.4.1/gems/aws-sdk-core-3.11.0/lib/aws-sdk-core/plugins/idempotency_token.rb:17:in `call'
from /usr/local/rvm/gems/ruby-2.4.1/gems/aws-sdk-core-3.11.0/lib/aws-sdk-core/plugins/param_converter.rb:24:in `call'
from /usr/local/rvm/gems/ruby-2.4.1/gems/aws-sdk-core-3.11.0/lib/aws-sdk-core/plugins/response_paging.rb:10:in `call'
from /usr/local/rvm/gems/ruby-2.4.1/gems/aws-sdk-core-3.11.0/lib/seahorse/client/plugins/response_target.rb:23:in `call'
from /usr/local/rvm/gems/ruby-2.4.1/gems/aws-sdk-core-3.11.0/lib/seahorse/client/request.rb:70:in `send_request'
from /usr/local/rvm/gems/ruby-2.4.1/gems/aws-sdk-s3-1.8.0/lib/aws-sdk-s3/client.rb:3321:in `list_buckets'
from /home/ec2-user/environment/s3.rb:9:in `list_my_buckets'
from /home/ec2-user/environment/s3.rb:18:in `<main>'
Process exited with code: 1
違うエラーになったよ!
アクセスキーが無効…。ロールのアタッチのときにアクセスキーの発行までやったっけ???
つーことで、もっかい↓に戻ります。
Calling AWS Services from an Environment in AWS Cloud9 - AWS Cloud9
Create and Store Permanent Access Credentials in an Environment
RailsGirls_day.2-2_re:re:retry
環境構築4回目?
本筋とあまり関係ないんですが、AWS Cloud9、作った環境を消して作り直すのもワンクリックなので大変楽ちんです。
簡単簡単♪
課題を整理
現在の課題としては
RailsGirlsで指定しているRubyのバージョンは2.4.2。
rbenvで、~/environment配下へのインストールを指示している。
に対して、AWS Cloud9ではrvmで管理されているRubyが元々組み込まれており、バージョンは2.4.1。
→つまりrvmを使って2.4.2を使える環境を作れればいけるのかも?
rvmでRuby2.4.2を追加インストール
ここまで調べてきてsudoが全然うまく動かなくてなんじゃいなと思っていたんですけど解決した。
RVM+sudoで`sudo: gem: command not found`とか言われたら`rvmsudo`を使えばいいらしいよ。 | Ginpen.com
sudoはシェルを改めて開始するためrvm useされてない状態になるから駄目、という事らしい。その点rvmsudoはRVM+Rubyを使うための環境変数をちゃんと設定してくれるそうだ。
ということでrvmsudoつかってみます。
#バージョン確認 $ruby -v #インストールできるRubyのバージョンを確認 $rvm list known #2.4.2がないのでrvmのバージョンを上げる $rvmsudo rvm get head #rvm再起動 $rvm reload #インストールできるRubyのバージョンを確認 $rvm list known #2.4.2をインストールする $rvmsudo rvm install 2.4.2 #バージョンを確認 $ruby -v #2.4.2をデフォルトで使うように指定 $rvm --default use 2.4.2 #バージョンを確認 $ruby -v
コンソールのログを取り忘れました…。ここまでやると2.4.1と2.4.2が共存している状態になってる、らしい。
rvmsudo使わないと書き込めない領域にRubyインストールしてんのもなんか気持ち悪いんだけど。
Rails Girls インストール・レシピ つづき
4. Bundlerのインストール
普通にやるとpermission errorでるので
rvmsudo gem install bundler --no-document
4. Railsのインストール
同じく
gem install rails --no-document
インストールレシピ完了しました。
Rails Girls アプリ・チュートリアル
railsgirls という名前の Rails アプリを作っていきます。
作っていきましょう!
ここも適宜rvmsudoしないと通らない。なんか絶対変だって(´;ω;`)
$mkdir projects $cd projects $rvmsudo rails new railsgirls $cd railsgirls $rvmsudo rails server -b 0.0.0.0
コンソール上はなんとか起動しているようにみえる。
…いけた…??
メニューから ‘preview’ - ‘port 3000’ を選んでください。
その項目ないです(´;ω;`)
ガイドやチュートリアルで、ブラウザから例えば http://localhost:3000 へアクセスする場合は、アドレス欄に入力するのではなく、画面上部から ‘Preview’ - ‘Priview Running Application’ を選ぶことで同じ操作ができます。
"起動してるアプリケーションなんざないで!!"って言われます。どうしてー(´;ω;`)
RailsGirls_day.2-1_re:retry
環境構築さんかいめ
EC2のCloud9環境からrvmを削除するところから始めます。
kabe:~/environment $ rvm seppuku
切腹!
kabe:~ $ which ruby /usr/bin/which: no ruby in (/home/ec2-user/.nvm/versions/node/v6.11.4/bin:/usr/local/rvm/gems/ruby-2.4.1/bin:/usr/local/rvm/gems/ruby-2.4.1@global/bin:/usr/local/rvm/rubies/ruby-2.4.1/bin:/usr/local/bin:/bin:/usr/bin:/home/ec2-user/.local/bin:/home/ec2-user/bin:/usr/local/sbin:/usr/sbin:/sbin:/opt/aws/bin:/usr/local/rvm/bin:/home/ec2-user/.local/bin:/home/ec2-user/bin:/home/ec2-user/.local/bin:/home/ec2-user/bin) kabe:~ $ ruby -v bash: ruby: command not found
Rubyがない状態になりました。
RailsGirlsの環境を作るよ
4. rbenv を使って Ruby の version を最新にする
↑に従ってRubyインストール。 今回は特に問題なく進みました(●´ω`●)
4. Bundlerのインストール
kabe:~/environment $ gem install bundler --no-document
Fetching: bundler-1.16.0.gem (100%)
ERROR: While executing gem ... (Errno::EACCES)
Permission denied @ dir_s_mkdir - /usr/local/rvm
うーん…やっぱり/usr/local/rvmでgemを実行しようとするみたい…どうしたら…??
kabe:~ $ gem env
RubyGems Environment:
- RUBYGEMS VERSION: 2.6.13
- RUBY VERSION: 2.4.2 (2017-09-14 patchlevel 198) [x86_64-linux]
- INSTALLATION DIRECTORY: /usr/local/rvm/gems/ruby-2.4.1
- USER INSTALLATION DIRECTORY: /home/ec2-user/.gem/ruby/2.4.0
- RUBY EXECUTABLE: /home/ec2-user/.rbenv/versions/2.4.2/bin/ruby
- EXECUTABLE DIRECTORY: /usr/local/rvm/gems/ruby-2.4.1/bin
- SPEC CACHE DIRECTORY: /home/ec2-user/.gem/specs
- SYSTEM CONFIGURATION DIRECTORY: /home/ec2-user/.rbenv/versions/2.4.2/etc
- RUBYGEMS PLATFORMS:
- ruby
- x86_64-linux
- GEM PATHS:
- /usr/local/rvm/gems/ruby-2.4.1
- /usr/local/rvm/gems/ruby-2.4.1@global
- GEM CONFIGURATION:
- :update_sources => true
- :verbose => true
- :backtrace => false
- :bulk_threshold => 1000
- REMOTE SOURCES:
- https://rubygems.org/
- SHELL PATH:
- /home/ec2-user/.rbenv/versions/2.4.2/bin
- /home/ec2-user/.rbenv/libexec
- /home/ec2-user/.rbenv/plugins/ruby-build/bin
- /home/ec2-user/.rbenv/shims
- /home/ec2-user/.rbenv/bin
- /home/ec2-user/.nvm/versions/node/v6.11.4/bin
- /usr/local/rvm/gems/ruby-2.4.1/bin
- /usr/local/rvm/gems/ruby-2.4.1@global/bin
- /usr/local/rvm/rubies/ruby-2.4.1/bin
- /usr/local/bin
- /bin
- /usr/bin
- /home/ec2-user/.local/bin
- /home/ec2-user/bin
- /usr/local/sbin
- /usr/sbin
- /sbin
- /opt/aws/bin
- /usr/local/rvm/bin
- /home/ec2-user/.local/bin
- /home/ec2-user/bin
- /home/ec2-user/.local/bin
- /home/ec2-user/bin
- /home/ec2-user/.local/bin
- /home/ec2-user/bin
- /home/ec2-user/.local/bin
- /home/ec2-user/bin
この、INSTALLATION DIRECTORYってのとGEM PATHSがrvmになってるのがだめっぽい。これrvm消しただけではダメなのね(´;ω;`)
RVMのために通していたパスを削除します。人によってパスを書いてるファイルが異なると思うので、「.bashrc」「.bash_profile」「.bash_login」「.profile」「.zshrc」とか、自分がパスを追加したファイルを開いてRVM関連の記述を削除します。
もしかしてこの辺の問題なのかな??だとするとそもそもこの環境EC2から提供されてるから、やっぱりrvmとrbenvの共存を実現するところから始めないとダメなんだろうか。結局のところgemインストールパスを変更できないのでbundlerのインストールができない、という問題は初日から何も変わっていないわけで、今日も進捗ゼロ。
RailsGirls_day.1-3retry
Rails Girls インストール・レシピ:クラウドサービスを利用する Rails Girls - Japanese
ということで再挑戦です。
- rbenv を使って Ruby の version を最新にする
kabe:~/environment $ ruby -v ruby 2.4.1p111 (2017-03-22 revision 58053) [x86_64-linux] kabe:~/environment $ which ruby /usr/local/rvm/rubies/ruby-2.4.1/bin/ruby
この状態からスタート。 まずは/home/ec2-user/の配下にrbenvとruby-buildをclone
kabe:~/environment $ git clone https://github.com/rbenv/rbenv.git ~/.rbenv Cloning into '/home/ec2-user/.rbenv'... remote: Counting objects: 2697, done. remote: Compressing objects: 100% (21/21), done. remote: Total 2697 (delta 13), reused 21 (delta 10), pack-reused 2666 Receiving objects: 100% (2697/2697), 506.27 KiB | 631.00 KiB/s, done. Resolving deltas: 100% (1682/1682), done. kabe:~/environment $ git clone https://github.com/rbenv/ruby-build.git ~/.rbenv/plugins/ruby-build Cloning into '/home/ec2-user/.rbenv/plugins/ruby-build'... remote: Counting objects: 8347, done. remote: Compressing objects: 100% (3/3), done. remote: Total 8347 (delta 1), reused 1 (delta 0), pack-reused 8344 Receiving objects: 100% (8347/8347), 1.75 MiB | 2.06 MiB/s, done. Resolving deltas: 100% (5280/5280), done.
PATHをとおして
echo 'PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bash_profile echo 'eval "$(rbenv init -)"' >> ~/.bash_profile source ~/.bash_profile
インストールして使用バージョンを指定。
kabe:~ $ rbenv install 2.4.2 Downloading ruby-2.4.2.tar.bz2... -> https://cache.ruby-lang.org/pub/ruby/2.4/ruby-2.4.2.tar.bz2 Installing ruby-2.4.2... Installed ruby-2.4.2 to /home/ec2-user/.rbenv/versions/2.4.2 kabe:~ $ rbenv global 2.4.2 kabe:~ $ which ruby ~/.rbenv/shims/ruby
普通に行けたやないか…
5.Bundlerのインストール
kabe:~ $ gem install bundler --no-document
Ignoring executable-hooks-1.3.2 because its extensions are not built. Try: gem pristine executable-hooks --version 1.3.2
Ignoring gem-wrappers-1.3.2 because its extensions are not built. Try: gem pristine gem-wrappers --version 1.3.2
Ignoring nio4r-2.1.0 because its extensions are not built. Try: gem pristine nio4r --version 2.1.0
Ignoring nokogiri-1.8.1 because its extensions are not built. Try: gem pristine nokogiri --version 1.8.1
Ignoring websocket-driver-0.6.5 because its extensions are not built. Try: gem pristine websocket-driver --version 0.6.5
Error loading RubyGems plugin "/usr/local/rvm/gems/ruby-2.4.1@global/gems/executable-hooks-1.3.2/lib/rubygems_plugin.rb": cannot load such file -- executable-hooks/wrapper (LoadError)
Error loading RubyGems plugin "/usr/local/rvm/gems/ruby-2.4.1@global/gems/gem-wrappers-1.3.2/lib/rubygems_plugin.rb": cannot load such file -- gem-wrappers (LoadError)
Fetching: bundler-1.16.0.gem (100%)
ERROR: While executing gem ... (Gem::FilePermissionError)
You don't have write permissions for the /usr/local/rvm/gems/ruby-2.4.1 directory.
なんで/usr/local/rvm/gems/ruby-2.4.1を見に行っちゃうんだろ。
kabe:~/environment $ gem environment
Ignoring executable-hooks-1.3.2 because its extensions are not built. Try: gem pristine executable-hooks --version 1.3.2
Ignoring gem-wrappers-1.3.2 because its extensions are not built. Try: gem pristine gem-wrappers --version 1.3.2
Ignoring nio4r-2.1.0 because its extensions are not built. Try: gem pristine nio4r --version 2.1.0
Ignoring nokogiri-1.8.1 because its extensions are not built. Try: gem pristine nokogiri --version 1.8.1
Ignoring websocket-driver-0.6.5 because its extensions are not built. Try: gem pristine websocket-driver --version 0.6.5
Error loading RubyGems plugin "/usr/local/rvm/gems/ruby-2.4.1@global/gems/executable-hooks-1.3.2/lib/rubygems_plugin.rb": cannot load such file -- executable-hooks/wrapper (LoadError)
Error loading RubyGems plugin "/usr/local/rvm/gems/ruby-2.4.1@global/gems/gem-wrappers-1.3.2/lib/rubygems_plugin.rb": cannot load such file -- gem-wrappers (LoadError)
RubyGems Environment:
- RUBYGEMS VERSION: 2.6.13
- RUBY VERSION: 2.4.2 (2017-09-14 patchlevel 198) [x86_64-linux]
- INSTALLATION DIRECTORY: /usr/local/rvm/gems/ruby-2.4.1
- USER INSTALLATION DIRECTORY: /home/ec2-user/.gem/ruby/2.4.0
- RUBY EXECUTABLE: /home/ec2-user/.rbenv/versions/2.4.2/bin/ruby
- EXECUTABLE DIRECTORY: /usr/local/rvm/gems/ruby-2.4.1/bin
- SPEC CACHE DIRECTORY: /home/ec2-user/.gem/specs
- SYSTEM CONFIGURATION DIRECTORY: /home/ec2-user/.rbenv/versions/2.4.2/etc
- RUBYGEMS PLATFORMS:
- ruby
- x86_64-linux
- GEM PATHS:
- /usr/local/rvm/gems/ruby-2.4.1
- /usr/local/rvm/gems/ruby-2.4.1@global
- GEM CONFIGURATION:
- :update_sources => true
- :verbose => true
- :backtrace => false
- :bulk_threshold => 1000
- REMOTE SOURCES:
- https://rubygems.org/
- SHELL PATH:
- /home/ec2-user/.rbenv/versions/2.4.2/bin
- /home/ec2-user/.rbenv/libexec
- /home/ec2-user/.rbenv/plugins/ruby-build/bin
- /home/ec2-user/.rbenv/shims
- /home/ec2-user/.rbenv/bin
- /home/ec2-user/.nvm/versions/node/v6.11.4/bin
- /usr/local/rvm/gems/ruby-2.4.1/bin
- /usr/local/rvm/gems/ruby-2.4.1@global/bin
- /usr/local/rvm/rubies/ruby-2.4.1/bin
- /usr/local/bin
- /bin
- /usr/bin
- /home/ec2-user/.local/bin
- /home/ec2-user/bin
- /usr/local/sbin
- /usr/sbin
- /sbin
- /opt/aws/bin
- /usr/local/rvm/bin
- /home/ec2-user/.local/bin
- /home/ec2-user/bin
- /home/ec2-user/.local/bin
- /home/ec2-user/bin
- /home/ec2-user/.local/bin
- /home/ec2-user/bin
- /home/ec2-user/.local/bin
- /home/ec2-user/bin
うーん…どうもrvm管理のものと混ざってしまっているように見える(´;ω;`)
which gemすると~/.rbenv/shims/gemが返ってくるんだけど、GEM PATHSにこのパスが無いのがおかしい??のかな??
調べてる途中でsudoしてしまって通っちゃった
kabe:~/environment $ sudo gem install bundler --no-rdoc --no-ri Fetching: bundler-1.16.0.gem (100%) GemWrappers: Can not wrap missing file: bundle GemWrappers: Can not wrap missing file: bundler GemWrappers: Can not wrap missing file: sprockets GemWrappers: Can not wrap missing file: thor GemWrappers: Can not wrap missing file: rackup GemWrappers: Can not wrap missing file: bundle GemWrappers: Can not wrap missing file: rails GemWrappers: Can not wrap missing file: ruby_executable_hooks GemWrappers: Can not wrap missing file: rake GemWrappers: Can not wrap missing file: nokogiri GemWrappers: Can not wrap missing file: bundler Successfully installed bundler-1.16.0 1 gem installed kabe:~/environment $ sudo gem install rails --no-document GemWrappers: Can not wrap missing file: sprockets GemWrappers: Can not wrap missing file: thor GemWrappers: Can not wrap missing file: rackup GemWrappers: Can not wrap missing file: bundle GemWrappers: Can not wrap missing file: rails GemWrappers: Can not wrap missing file: ruby_executable_hooks GemWrappers: Can not wrap missing file: rake GemWrappers: Can not wrap missing file: nokogiri GemWrappers: Can not wrap missing file: bundler Successfully installed rails-5.1.4 1 gem installed
これで先にすすめるんだろうか…一旦やってみる。
kabe:~/environment $ mkdir projects
kabe:~/environment $ cd projects
kabe:~/environment/projects $ rails new railsgirls
Ignoring executable-hooks-1.3.2 because its extensions are not built. Try: gem pristine executable-hooks --version 1.3.2
Ignoring gem-wrappers-1.3.2 because its extensions are not built. Try: gem pristine gem-wrappers --version 1.3.2
Ignoring nio4r-2.1.0 because its extensions are not built. Try: gem pristine nio4r --version 2.1.0
Ignoring nokogiri-1.8.1 because its extensions are not built. Try: gem pristine nokogiri --version 1.8.1
Ignoring websocket-driver-0.6.5 because its extensions are not built. Try: gem pristine websocket-driver --version 0.6.5
create
create README.md
create Rakefile
create config.ru
create .gitignore
create Gemfile
run git init from "."
Initialized empty Git repository in /home/ec2-user/environment/projects/railsgirls/.git/
create app
create app/assets/config/manifest.js
create app/assets/javascripts/application.js
create app/assets/javascripts/cable.js
create app/assets/stylesheets/application.css
create app/channels/application_cable/channel.rb
create app/channels/application_cable/connection.rb
create app/controllers/application_controller.rb
create app/helpers/application_helper.rb
create app/jobs/application_job.rb
create app/mailers/application_mailer.rb
create app/models/application_record.rb
create app/views/layouts/application.html.erb
create app/views/layouts/mailer.html.erb
create app/views/layouts/mailer.text.erb
create app/assets/images/.keep
create app/assets/javascripts/channels
create app/assets/javascripts/channels/.keep
create app/controllers/concerns/.keep
create app/models/concerns/.keep
create bin
create bin/bundle
create bin/rails
create bin/rake
create bin/setup
create bin/update
create bin/yarn
create config
create config/routes.rb
create config/application.rb
create config/environment.rb
create config/secrets.yml
create config/cable.yml
create config/puma.rb
create config/spring.rb
create config/environments
create config/environments/development.rb
create config/environments/production.rb
create config/environments/test.rb
create config/initializers
create config/initializers/application_controller_renderer.rb
create config/initializers/assets.rb
create config/initializers/backtrace_silencers.rb
create config/initializers/cookies_serializer.rb
create config/initializers/cors.rb
create config/initializers/filter_parameter_logging.rb
create config/initializers/inflections.rb
create config/initializers/mime_types.rb
create config/initializers/new_framework_defaults_5_1.rb
create config/initializers/wrap_parameters.rb
create config/locales
create config/locales/en.yml
create config/boot.rb
create config/database.yml
create db
create db/seeds.rb
create lib
create lib/tasks
create lib/tasks/.keep
create lib/assets
create lib/assets/.keep
create log
create log/.keep
create public
create public/404.html
create public/422.html
create public/500.html
create public/apple-touch-icon-precomposed.png
create public/apple-touch-icon.png
create public/favicon.ico
create public/robots.txt
create test/fixtures
create test/fixtures/.keep
create test/fixtures/files
create test/fixtures/files/.keep
create test/controllers
create test/controllers/.keep
create test/mailers
create test/mailers/.keep
create test/models
create test/models/.keep
create test/helpers
create test/helpers/.keep
create test/integration
create test/integration/.keep
create test/test_helper.rb
create test/system
create test/system/.keep
create test/application_system_test_case.rb
create tmp
create tmp/.keep
create tmp/cache
create tmp/cache/assets
create vendor
create vendor/.keep
create package.json
remove config/initializers/cors.rb
remove config/initializers/new_framework_defaults_5_1.rb
run bundle install
Ignoring executable-hooks-1.3.2 because its extensions are not built. Try: gem pristine executable-hooks --version 1.3.2
Ignoring gem-wrappers-1.3.2 because its extensions are not built. Try: gem pristine gem-wrappers --version 1.3.2
Ignoring nio4r-2.1.0 because its extensions are not built. Try: gem pristine nio4r --version 2.1.0
Ignoring nokogiri-1.8.1 because its extensions are not built. Try: gem pristine nokogiri --version 1.8.1
Ignoring websocket-driver-0.6.5 because its extensions are not built. Try: gem pristine websocket-driver --version 0.6.5
--- ERROR REPORT TEMPLATE -------------------------------------------------------
# Error Report
## Questions
Please fill out answers to these questions, it'll help us figure out
why things are going wrong.
- **What did you do?**
I ran the command `/usr/local/rvm/gems/ruby-2.4.1@global/gems/bundler-1.16.0/exe/bundle install`
- **What did you expect to happen?**
I expected Bundler to...
- **What happened instead?**
Instead, what happened was...
- **Have you tried any solutions posted on similar issues in our issue tracker, stack overflow, or google?**
I tried...
- **Have you read our issues document, https://github.com/bundler/bundler/blob/master/doc/contributing/ISSUES.md?**
...
## Backtrace
`
Errno::ENOTDIR: Not a directory @ rb_sysopen - /home/ec2-user/.rbenv/shims/gem/bundler.lock
/usr/local/rvm/gems/ruby-2.4.1@global/gems/bundler-1.16.0/lib/bundler/process_lock.rb:9:in `initialize'
/usr/local/rvm/gems/ruby-2.4.1@global/gems/bundler-1.16.0/lib/bundler/process_lock.rb:9:in `open'
/usr/local/rvm/gems/ruby-2.4.1@global/gems/bundler-1.16.0/lib/bundler/process_lock.rb:9:in `lock'
/usr/local/rvm/gems/ruby-2.4.1@global/gems/bundler-1.16.0/lib/bundler/installer.rb:72:in `run'
/usr/local/rvm/gems/ruby-2.4.1@global/gems/bundler-1.16.0/lib/bundler/installer.rb:25:in `install'
/usr/local/rvm/gems/ruby-2.4.1@global/gems/bundler-1.16.0/lib/bundler/cli/install.rb:65:in `run'
/usr/local/rvm/gems/ruby-2.4.1@global/gems/bundler-1.16.0/lib/bundler/cli.rb:224:in `block in install'
/usr/local/rvm/gems/ruby-2.4.1@global/gems/bundler-1.16.0/lib/bundler/settings.rb:136:in `temporary'
/usr/local/rvm/gems/ruby-2.4.1@global/gems/bundler-1.16.0/lib/bundler/cli.rb:223:in `install'
/usr/local/rvm/gems/ruby-2.4.1@global/gems/bundler-1.16.0/lib/bundler/vendor/thor/lib/thor/command.rb:27:in `run'
/usr/local/rvm/gems/ruby-2.4.1@global/gems/bundler-1.16.0/lib/bundler/vendor/thor/lib/thor/invocation.rb:126:in `invoke_command'
/usr/local/rvm/gems/ruby-2.4.1@global/gems/bundler-1.16.0/lib/bundler/vendor/thor/lib/thor.rb:387:in `dispatch'
/usr/local/rvm/gems/ruby-2.4.1@global/gems/bundler-1.16.0/lib/bundler/cli.rb:27:in `dispatch'
/usr/local/rvm/gems/ruby-2.4.1@global/gems/bundler-1.16.0/lib/bundler/vendor/thor/lib/thor/base.rb:466:in `start'
/usr/local/rvm/gems/ruby-2.4.1@global/gems/bundler-1.16.0/lib/bundler/cli.rb:18:in `start'
/usr/local/rvm/gems/ruby-2.4.1@global/gems/bundler-1.16.0/exe/bundle:30:in `block in <main>'
/usr/local/rvm/gems/ruby-2.4.1@global/gems/bundler-1.16.0/lib/bundler/friendly_errors.rb:122:in `with_friendly_errors'
/usr/local/rvm/gems/ruby-2.4.1@global/gems/bundler-1.16.0/exe/bundle:22:in `<main>'
`
## Environment
`
Bundler 1.16.0
Platforms ruby, x86_64-linux
Ruby 2.4.2p198 (2017-09-14 revision 59899) [x86_64-linux]
Full Path /home/ec2-user/.rbenv/versions/2.4.2/bin/ruby
Config Dir /home/ec2-user/.rbenv/versions/2.4.2/etc
RubyGems 2.6.13
Gem Home /home/ec2-user/.rbenv/shims/gem
Gem Path
User Path /home/ec2-user/.gem/ruby/2.4.0
Bin Dir /home/ec2-user/.rbenv/shims/gem/bin
OpenSSL
Compiled OpenSSL 1.0.2k 26 Jan 2017
Loaded OpenSSL 1.0.2k-fips 26 Jan 2017
Cert File /etc/pki/tls/cert.pem
Cert Dir /etc/pki/tls/certs
Tools
Git 2.13.6
RVM 1.29.3 (latest)
rbenv rbenv 1.1.1-25-g6aa70b6
chruby not installed
`
## Bundler Build Metadata
`
Built At 2017-10-31
Git SHA 10f20fa33
Released Version true
`
## Bundler settings
`
path
Set for the current user (/home/ec2-user/.bundle/config): "/home/ec2-user/.rbenv/shims/gem"
disable_shared_gems
Set for the current user (/home/ec2-user/.bundle/config): true
`
## Gemfile
### Gemfile
`ruby
source 'https://rubygems.org'
git_source(:github) do |repo_name|
repo_name = "#{repo_name}/#{repo_name}" unless repo_name.include?("/")
"https://github.com/#{repo_name}.git"
end
# Bundle edge Rails instead: gem 'rails', github: 'rails/rails'
gem 'rails', '~> 5.1.4'
# Use sqlite3 as the database for Active Record
gem 'sqlite3'
# Use Puma as the app server
gem 'puma', '~> 3.7'
# Use SCSS for stylesheets
gem 'sass-rails', '~> 5.0'
# Use Uglifier as compressor for JavaScript assets
gem 'uglifier', '>= 1.3.0'
# See https://github.com/rails/execjs#readme for more supported runtimes
# gem 'therubyracer', platforms: :ruby
# Use CoffeeScript for .coffee assets and views
gem 'coffee-rails', '~> 4.2'
# Turbolinks makes navigating your web application faster. Read more: https://github.com/turbolinks/turbolinks
gem 'turbolinks', '~> 5'
# Build JSON APIs with ease. Read more: https://github.com/rails/jbuilder
gem 'jbuilder', '~> 2.5'
# Use Redis adapter to run Action Cable in production
# gem 'redis', '~> 3.0'
# Use ActiveModel has_secure_password
# gem 'bcrypt', '~> 3.1.7'
# Use Capistrano for deployment
# gem 'capistrano-rails', group: :development
group :development, :test do
# Call 'byebug' anywhere in the code to stop execution and get a debugger console
gem 'byebug', platforms: [:mri, :mingw, :x64_mingw]
# Adds support for Capybara system testing and selenium driver
gem 'capybara', '~> 2.13'
gem 'selenium-webdriver'
end
group :development do
# Access an IRB console on exception pages or by using <%= console %> anywhere in the code.
gem 'web-console', '>= 3.3.0'
gem 'listen', '>= 3.0.5', '< 3.2'
# Spring speeds up development by keeping your application running in the background. Read more: https://github.com/rails/spring
gem 'spring'
gem 'spring-watcher-listen', '~> 2.0.0'
end
# Windows does not include zoneinfo files, so bundle the tzinfo-data gem
gem 'tzinfo-data', platforms: [:mingw, :mswin, :x64_mingw, :jruby]
`
### Gemfile.lock
`
<No /home/ec2-user/environment/projects/railsgirls/Gemfile.lock found>
`
--- TEMPLATE END ----------------------------------------------------------------
Unfortunately, an unexpected error occurred, and Bundler cannot continue.
First, try this link to see if there are any existing issue reports for this error:
https://github.com/bundler/bundler/search?q=Not+a+directory+%40+rb_sysopen+-+%2Fhome%2Fec2-user%2F.rbenv%2Fshims%2Fgem%2Fbundler.lock&type=Issues
If there aren't any reports for this error yet, please create copy and paste the report template above into a new issue. Don't forget to anonymize any private data! The new issue form is located at:
https://github.com/bundler/bundler/issues/new
run bundle exec spring binstub --all
bundler: command not found: spring
Install missing gem executables with `bundle install`
やっぱりねー! やっぱ一度rvmを削除してrbenvでRubyインストールするところから始めたほうがよさそうな気がしてきました。 もう一度最初から。