vagrant チートシート

ちょっと便利なチートシート。主に覚書。
vagrant ssh-config --host 192.168.33.10
で ~/.ssh/configに以下のように書き込まれるので

Host 192.168.33.10
  HostName 127.0.0.1
  User vagrant
  Port 2200
  UserKnownHostsFile /dev/null
  StrictHostKeyChecking no
  PasswordAuthentication no
  IdentityFile /Users/xxxxx/Vagrant/ansibleCentOS72/.vagrant/machines/default/virtualbox/private_key
  IdentitiesOnly yes
  LogLevel FATAL
ssh 192.168.33.10 

sshアクセスできる。

ruby on railsは、うまく動作させるまでが結構大変

ruby 2.1.0
rails 4.1
でテスト中

mysql2はバージョン0.3.21を使うべし 0.4.5は動かない。
rspecのバージョンは3.4を使うべし、これで動いた。

mysql を動かすには
mysql-develも必要

centos7への
mysql5.6のインストール・設定を書いておく

sudo yum -y localinstall http://dev.mysql.com/get/mysql57-community-release-el7-9.noarch.rpm
sudo yum remove mariadb-libs
sudo rm -rf /var/lib/mysql/
yum repolist all | grep mysql
sudo yum -y install yum-utils
sudo yum-config-manager --disable mysql57-community
sudo yum-config-manager --enable mysql56-community
sudo yum -y install mysql-community-server
sudo systemctl start mysqld
sudo systemctl enable mysqld
/usr/bin/mysqladmin -u root password 'root'
sudo yum install mysql-devel

ローカル開発環境なのでmysqlのパスワードはrootにしているが、実際は難しいのにしましょう。環境変数で設定する。



Gemfile

source 'https://rubygems.org'

ruby '2.1.0'
# Bundle edge Rails instead: gem 'rails', github: 'rails/rails'
gem 'rails', '4.1.0'

# Use mysql as the database for Active Record
gem 'mysql2', '~> 0.3.21'
# Use SCSS for stylesheets
gem 'sass-rails', '~> 4.0.3'
# Use Uglifier as compressor for JavaScript assets
gem 'uglifier', '>= 1.3.0'
# Use CoffeeScript for .js.coffee assets and views
gem 'coffee-rails', '~> 4.0.0'
# See https://github.com/sstephenson/execjs#readme for more supported runtimes
# gem 'therubyracer',  platforms: :ruby

# Use jquery as the JavaScript library
gem 'jquery-rails'
# Turbolinks makes following links in your web application faster. Read more: https://github.com/rails/turbolinks
gem 'turbolinks'
# Build JSON APIs with ease. Read more: https://github.com/rails/jbuilder
gem 'jbuilder', '~> 2.0'
# bundle exec rake doc:rails generates the API under doc/api.
gem 'sdoc', '~> 0.4.0',          group: :doc

# Spring speeds up development by keeping your application running in the background. Read more: https://github.com/rails/spring
gem 'spring',        group: :development

# Use ActiveModel has_secure_password
# gem 'bcrypt', '~> 3.1.7'

# Use unicorn as the app server
# gem 'unicorn'

# Use Capistrano for deployment
# gem 'capistrano-rails', group: :development

# Use debugger
# gem 'debugger', group: [:development, :test]

gem 'therubyracer', platforms: :ruby
gem 'bcrypt', '~> 3.1.7'
gem 'nokogiri', '~> 1.6.1'
gem 'rails-i18n', '~> 4.0.1'
group :test do
	gem 'rspec-rails', '~> 3.4'
	gem 'spring-commands-rspec', '~> 1.0.1'
	gem 'capybara', '~> 2.2.1'
	gem 'factory_girl_rails', '~> 4.4.1'
	gem 'database_cleaner', '~> 1.2.0'
end

ansibleをサックと簡単に使うんよ

ansibleでvagrantの開発環境をサックと整備したいということで色々やってみた。

ansible_localというのでvagrant内にansibleをインストールして、そこで、playbookに記述した内容を実行する。

ruby on railsの開発環境を構築してみた。

Vagrantファイルのあるところに
play_book.yml
hosts
ansible.cfg
の3つを用意する。

play_book.yml

---
- hosts: all
  become: yes
  user: vagrant
  tasks:
    - yum: name={{item}} state=latest
      with_items:
        - gcc
        - zlib-devel
        - openssl-devel
        - libffi-devel
        - readline-devel

    - name: install git
      yum: name=git state=latest

    - git: >
        repo=https://github.com/sstephenson/rbenv.git
        dest=/home/vagrant/.rbenv/

    - git: >
        repo=https://github.com/sstephenson/ruby-build.git
        dest=/home/vagrant/.rbenv/plugins/ruby-build/
    - file: path=/home/vagrant/.rbenv owner=vagrant state=directory recurse=yes


    - lineinfile: 
        dest: /home/vagrant/.bashrc
        line: export PATH=$PATH:$HOME/.rbenv/bin:$HOME/.rbenv/shim
   
    - lineinfile: 
        dest: /home/vagrant/.bashrc
        line: eval "$(rbenv init -)"
    

    - shell: source $HOME/.bashrc

    - shell: rbenv install -v 2.1.5
      become: no
    - shell: rbenv rehash
      become: no
    - shell: rbenv global 2.1.5
      become: no

    - shell: /usr/bin/bash -l -c '$HOME/.rbenv/shims/gem install bundler --no-document'
      become: yes
      become_user: vagrant
    - shell: /usr/bin/bash -l -c '$HOME/.rbenv/shims/gem install rails -v 4.1.0'
      become: yes
      become_user: vagrant

    - yum: name={{item}} state=latest
      with_items:
        - ruby-devel
        - rubygems

hosts

192.168.33.10 ansible_connection=local


ansible.cfg

[defaults]
host_key_checking = no
executable = /bin/bash -l

[ssh_connection]
ssh_args = -o ControlMaster=auto -o ControlPersist=60s -o UserKnownHostsFile=/dev/null -o IdentitiesOnly=yes

Vagrantfile

Vagrant.configure("2") do |config|
 config.vm.box = "CentOS72"
 config.vm.network "private_network", ip: "192.168.33.10"

 config.vm.provision :ansible_local do |ansible|
    ansible.playbook = 'play_book.yml'
    ansible.verbose = true
    ansible.install = true
    ansible.limit = 'all'
    ansible.inventory_path = 'hosts'

  end
end

kusanagiでLets encrypt を自動更新設定してるんだけども、うまくいかないケースの対処法

https化は時代の趨勢だとわかっているけれども、対応するのに困ってる人は多いと思います。
conohaでkusanagiを使うとめっちゃ簡単にhttpsに対応できて便利なんです。
でも、今回は、自動更新がうまくいかず、chromeに怪しいサイト認定されてしまったのでその原因究明をしてみましたとさ。

djangoを徒然なく学びながらpythonも学ぶ

python

r'^hello/$'

の意味

文頭に付くr 文字の意味はraw string という意味。
pythonでは\ (バックスラッシュ)はエスケーピングの特別文字となっているので, 改行 \n文字などが使える。rが付くとそれを無視するという意味。

^ (caret) は文字列の先頭を意味する。
$ は文字列の終わりにマッチする必要があるという意味

$を付けないで^hello/ だけにすると
/hello/bar, /hello/foo などもマッチするようになる。






vagrantでweb開発をするのに必要なtips

vagrantでweb開発する際のハマりどころがいくつかあります。

まず、vagrantでは/vagrantが共有フォルダの役割を果たして便利なわけですが。

そこに/var/www/htmlのシンボリックリンクをはると、mac側でプログラムを変更しながら、linuxサーバー上での挙動を色々と見れます。
macのお気に入りのエディタで、プログラムを編集して、それをlinuxサーバー上で動かし、随時変更していけるわけです。

sudo rm -rf /var/www/html
sudo ln -fs /vagrant /var/www/html

でOKです。

これで/vagrant内のファイルを192.168.33.10というIPアドレスを使ってアクセスできます。

でめでたく、webサイトのテストができるようになるんですが、一つ問題点があります。
例えば、index.htmlを編集後、ブラウザをリロードしても全く反映されません。

これがわからなくてしばらくハマったのですが、これはvagrantの共有フォルダ/vagrantが外部ハードディスクのような扱いで、httpdがこのフォルダ内の更新を検知できないためです。ブラウザのキャッシュの問題ではないということです。懸命にブラウザのキャッシュを消して見たり、デベロッパーツールからdisable cacheをやったり、command+Rで更新しても、更新ボタンを長押しして「キャッシュのハード読み込みとキャッシュの消去」をしても意味がありません。サーバー側の問題なので。

httpd.confにキャッシュしない設定を追記する。(要再起動)

<Directory /var/www/html >
EnableMMAP Off
EnableSendfile Off
</Directory>

として、systemctl restart httpd
とすることで問題が解決できました。
よかったよかった。