Railsで既にindexをつけているカラムにunique制限をもうけるには、ユニーク制限だけを付加することができないので一旦インデックス自体を削除してから新規に unique な index を追加します。
def change remove_index :editabilities, [:user_id, :list_id] add_index :editabilities, [:user_id, :list_id], unique: true end 参考 [ruby on rails – How to add unique constraint to already existing index by migration – Stack Overflow][1]
Rubyの命名規則としてクラス名は通常はCamelCaseで記述しますが、HTTPなどの頭字語(Acronym)はそのまますべて大文字で記述します。
Railsで頭字語のクラス名を使うときはモデル等を生成する前に設定で以下の記述を行っておくと自動的に認識してくれます。
config/initializers/inflections.rb ActiveSupport::Inflector.inflections(:en) do |inflect| inflect.acronym 'GNU' end ただhas_manyでこのクラスを持とうとすると以下のエラーになってしまいます。
LoadError: Unable to autoload constant Gnu, expected
/Users/ironsand/dev/myproject/app/models/gnu.rb to define it
対策 クラス名を明示的に指定するとOKです。
has_many :gnus, class_name => "GNU"
[初めてのラズベリーパイ 【購入からSSH接続まで】 | 答えを知りたい][1] にてSSH接続ができるようになりましたので今回はVNCを使ってリモートデスクトップ接続をする方法を解説します。
VNCでデスクトップ共有すると便利 Raspberry側でする設定 まずはssh pi@192.168.xxx.xxxで接続します。そして必要なパッケージをインストール。
pi@raspberrypi ~ $ sudo apt-get -y install tightvncserver 次にサービスを起動します。VNCに接続するときのパスワードを要求されますので何にするか決めます。
また閲覧専用のためのパスワードを設定するかどうか聞かれますのでnで無しにしておきます。別に閲覧専用のパスワードを用意しても構いませんがそんな使い方をラズベリーパイですることはないでしょう。
pi@raspberrypi ~ $ tightvncserver You will require a password to access your desktops. Password: Verify: Would you like to enter a view-only password (y/n)? n サーバーが立ち上がったらVNC用のWindowを一つ用意します。
$ vncserver :0 -geometry 1024x768 -depth 24 これでラズベリーパイ側の設定は完了です。
PC側からの設定 PC側にVNCのクライアントをインストールします。Mac の場合は特に何もインストールする必要はありません。
Linuxでのインストール aptでインストールします。
sudo apt-get install xtightvncviewer Windowsでのインストール [Download TightVNC][2] から “Installer for Windows” をダウンロードしてインストールします。
ラズベリーパイがよくわからないからとりあえず触ってみる会 | Doorkeeper
を思いつきで呼びかけてみたら意外と人が集まったので、イベント前日の今日に急いで最低限の初期設定をしているテツです。こんにちは。
私と同じように『ラズベリーパイって面白そうだけど何か全然わかんない。』という人に少しでも役に立てばを思い記事を書いています。
Selenium-WebDriverとNokogiriで同じファイルを開いても違うxpathを書かないといけないとダメで少しハマったのでメモ。
違いの原因 同じHTMLを解析してもSelenium-WebDriverでChromeやFirefoxで開いた時は任意の要素であるtbodyが挿入されるために違いが発生します。
実際の例 例えば
<table> <tr> <td></td> </tr> </table> とある時に
Nokogiri の場合 require 'nokogiri' doc = Nokogiri::HTML(File.read("test.html")) doc.xpath("//table/tr") Selenium WebDriver の場合 require 'selenium-webdriver' driver = Selenium::WebDriver.for :chrome driver.get("file:///C:/Users/ironsand/test.html") driver.find_element(:xpath, "//table/tbody/tr") 基本的な対策 大体の場合は//table//trとどちらにも対応できるように書いたらいいわけですが、汚いHTMLを解析するときに
//tr/td/font[contains(text(), 'Keyword')]/../../following-sibling::tr[3]/td
な感じで正確なタグの数が必要になることがあるのでそういう時に気をつけましょう。
参考 [ruby – How to get element that have same parent and n th different position by xpath – Stack Overflow][1]
sshでログインして処理の重たいコマンドを実行した後にセッションが途切れてしまうとそのコマンドをもう一度fbなどでフォアグラウンドに持ってこようと思っても残念ながらできません。違うシェルのインスタンスから立ち上げたらプロセスは別のインスタンスのシェルには持ってこれないかららしいです。
Screenの使い方 まず初めからコマンドをscreenを使って立ち上げておきましょう。
$ screen ruby it_takes_very_long.rb
そして、一旦sshの接続を切って繋ぎ直します。
$ screen -listをするとこんな感じで表示されるので
There is a screen on: 31744.pts-0.Sakura (Detached) 1 Socket in /var/run/screen/S-ironsand. $ screen -r 31744.pts-0.Sakuraでスクリーンに繋ぎ直せば画面への出力をもう一度見ることが出来ます。
参考 [Linux Screen Tutorial – YouTube][1]
knife solo cook foo とするとBerkshelf::LockfileParserErrorってエラーが出てビビる。
対策 rm Berkshelf.lock で ロックファイルをを消したら治った。.gitignoreに加えてたほうが良いのかな? Gemfile.lockと同じく加えるかどうかに賛否両論ありそう。
例えば nokogiri でちゃんとデータの取得ができてるか確認するために
irbを使うために
$ irb してから
require "nokogiri"と
自分はいつもしてたんですが、めんどくさい。
解決策 $ irb -r nokogiriな感じでライブラリが読み込めます。ステキ!
確実に忘れる上にドキュメントが全然見つからないCapistrano 3をVPSにDeployする方法のメモ。
作業しながら書いてるのでホントに出来るかは書いてる本人もわかりません。
基本的にはRailscastの[“Deploying to a VPS”][1]の設定とCapistrano 3の組み合わせです。
環境 Windows 7
Capistrano 3.1.0
rails 4.1.0
ruby 2.0.0p195 (2013-05-14) [i386-mingw32]
Postgresql
さくらのVPS (一番安いの)
git リポジトリ VPS上にgit repositoryを作成しておいてそこにプロジェクトをpushしときます。
場所は var/git-repos/#{site}.git。
Gemfile # Use unicorn as the app server gem 'unicorn', group: :production # Use Capistrano for deployment gem 'capistrano', '~> 3.1' gem 'capistrano-rails', '~> 1.1' gem 'capistrano-rbenv', '~> 2.0' Nginx Nginxの設定ファイルをconfig/nginx.confに作成。※#{site}は適当に置き換える。
upstream unicorn_${site} { server unix:/tmp/unicorn.${site}.sock fail_timeout=0; } server { listen 80; server_name ${site}.
デフォルトではConEmuで複数のタブを開いた状態でタスクバーのアイコンをクリックすると、どのタブを選択するかを選ばないとアクティブにすることができません。
自分はとりあえずクリックしたらアクティブになって欲しいので設定を変えてしまいます。
変え方 ConEmuのタイトルバーを右クリックしてSettingsを開いて
左上のFind:のところでActive console onlyと検索します。
するとMain->Task bar->Taskbar buttonsの項目のShow all consolesがデフォルトで選ばれてると思うので、それをActive console only (ConEmu window)に変えてSave settingsすればOKです。ステキ!