王筝的博客
ruby学习

$ cap deploy:setup

执行到这一步的时候会时间较长,可以直接中断

* executing “sudo -p ‘sudo password: ‘ yum check-update -q -y || true”

$ git log <file name>

可以查看关于这个文件的所有log

在cap deploy自动执行到bundle install的时候报错,

Unfortunately, a fatal error has occurred. Please see the Bundler
** [out :: 11.11.11.11] troubleshooting documentation at http://bit.ly/bundler-issues.

bundle执行不过去是因为没有设置代理,所以服务器不能访问外网

在服务器current文件夹里

$export http_proxy=http://11.11.11.xx:80

$echo $http_proxy

$bundle

 

 

在本地执行cap deploy部署的时候会报错:

connection failed for: 11.11.11.11 (Net::SSH::AuthenticationFailed: Authentication failed for user root@11.11.11.11)

也没有提示输密码,但是如果直接用用户名密码是可以登录的

$ssh 11.11.11.11 -l root -p 22222

出现提示root@11.11.11.11’s password:

这时候会提示输入密码,这是怎么回事呢,

Apparently this issue was with net-ssh gem. I had version 2.8.0 installed recently with some updates to my development environment and was the cause.

I’m not sure why it was failing, but gem uninstall net-ssh -v 2.8.0 fixed it for me.

If anyone actually knows why this was an issue or how I can correct this issue with the newer version of net-ssh I’d be interested to hear it

$gem list -l net-ssh

会显示

*** LOCAL GEMS ***

net-ssh (2.8.0, 2.7.0, 2.6.8, 2.3.0)
net-ssh-gateway (1.2.0, 1.1.0)

$ gem uninstall net-ssh -v 2.8.0

Successfully uninstalled net-ssh-2.8.0

$rbenv rehash

再次cap deploy就ok啦。

 

http://stackoverflow.com/questions/21560297/capistrano-sshauthenticationfailed-not-prompting-for-password

 

url点开后的json是这样的

{

  • e:

    {

    • provider: “searches.soku.top”,
    • code: 0,
    • desc: “OK”

    },

  • total: 1320,
  • cost: 35,
  • data:

    [

    • {

      • promId: 278579,
      • queryCount: 69799,
      • keyword: “熊出没”

      },

    • {
      • promId: 110787,
      • queryCount: 12579,
      • keyword: “倒霉熊”

      },

    • {
      • promId: 253153,
      • queryCount: 11341,
      • keyword: “天线宝宝”

      },

    • {
      • promId: 217505,
      • queryCount: 11095,
      • keyword: “网球王子”

      }

    ]

}

JSON.parse(HTTParty.get(url).body)[“data”]

[{“promId”=>278579, “queryCount”=>69799, “cateId”=>5, “keyword”=>”熊出没”},

{“promId”=>284119, “queryCount”=>67475, “cateId”=>5, “keyword”=>”啦啦啦德玛西亚”},

{“promId”=>276009, “queryCount”=>14648, “cateId”=>5, “keyword”=>”变形金刚”},

{“promId”=>110787, “queryCount”=>12579, “cateId”=>5, “keyword”=>”倒霉熊”}]

JSON.parse(HTTParty.get(url).body)[“data”].map{|hash| hash[“promId”]}

得到的就是

[278579, 284119, 19461]

 

 

今天有两个单元测试一直跑不通,究其原因是没搞清楚单元测试的传参的概念,之前大师强调过的,今天pp又讲解了一遍。以第一个单元测试的测试模块的25行为例

25 put :modify, :id => @list.id, :rankinglist => {:title => new_title}

这个报错是因为我写成了list =>{:title => new_title},但是被测模块里是没有这个参数的,想知道有啥就看被测模块 params里面的内容啊,有几个传几个就行。

这个巧合的是我的前端代码是这样的

<%=  text_field_tag  ‘title’ ,@rankinglist.title  %>由于text_field_tag里的内容在html里解析为id=‘title’,name =’title’,所以在25行里没有:title也是ok的

23def modify
24 @rankinglist.title = params[:title]
25 if @rankinglist.update_attributes(params[:rankinglist])
26 redirect_to edit_tv_i_rankinglist_path(:id => @rankinglist.id) , :notice => ‘操作成功’
27 else
28 render :action => “edit”
29 end
30 end

 

对应的单元测试

23it ‘should put update’ do
24 new_title = ‘test’
25 put :modify, :id => @list.id, :rankinglist => {:title => new_title}
26 @list.reload.title.should == new_title
27 end

 

再来看第二个写错的单元测试

5def index
6 @module_type = params[:module_type]
7 @rankinglists = CmsTvRankingList.where(‘state = ? ‘, 1)
8 @rankinglist = CmsTvRankingList.find_by_id(params[:rankinglist_id]) || @rankinglists.try(:first)
9 @modules = CmsTvRankingListModule.where(‘rankinglist_type = ? ‘, @rankinglist.id).order(:position)
10 end

对应的单元测试

5before do
6 admin_login
7 request.env[“HTTP_REFERER”] = root_path
8 @rankinglist = CmsTvRankingList.create(:title =>’5′ ,:state => ‘1’)
9 @module = CmsTvRankingListModule.create(:title => ‘测试’, :rankinglist_type => 5)
10 end
11 it ‘should get index’ do
12 get :index, :rankinglist_id =>’1′
13 response.should be_success
14 end

错在哪里呢,由于这个排行榜子菜单是在排行榜菜单内部的,所以是需要先保证被测的第8行是有值的,所以需要写上测试里的第8行,当然,测试的12行后半句也是必要的。

首先登录到服务器上,进入文件夹,我们这边的是m-cms

$mysqldump -uroot mos > db_bak.20140321.sql

回到本地m-cms,把数据库拷贝到本地来

$scp -P 22222 root@11.111.11.111:/opt/m-cms/db_bak.20140321.sql ..

然后在/workspace里就有这个文件啦

导入就可以啦

$mysql -uroot -p cms_development < db_bak.20140321.sql

由于公司的服务器是分测试和正式的,由于每个系统的正式和测试的环境地址都不同,所以在加链接的时候不能直接的写

<%= link_to ‘ [接口链接]’,”http://test.api.3g.yi.com:3800″ , :target => ‘_blank’%>

由于这是测试环境的地址,直接发布的话,正式环境上的链接地址打开后还是测试环境的,这一点的解决方案是:

在config/settings.yml

preview:
host: ‘http:///test.api.3g.yi.com’
port: ‘3800’

然后把html的链接改成

<%= link_to ‘ [接口链接]’, “#{Settings.preview.host}:#{Settings.preview.port}”,  :target => ‘_blank’%>

然后再去测试环境服务器和正式环境服务器上进入share文件夹把对应的settings.yml文件里的端口和链接地址分别配置,这样就能解决发布时候正式测试地址链接不同的问题了。

 

 

目前使用的ajax排序是这样的。

每个table , 都要这样声明 ( table 中必须有2个属性: class, entity_class,(可选属性base_index) tbody tr中,要有 id=“ids_2233”:其中entity_class就是对应的表的名字,class=‘sortable’就是固定的

 

<table class='sortable' entity_class='CmsAndroidContent' base_index='-1000'>   <!-- base_index is optional --> 
    <tbody>
      <% @records.each do |entity| %>
      <tr id='ids_<%= entity.id %>'>
        <!-- .... -->
      </tr>
      <% end %>
    </tbody>
  </table>

页面拖拽排序首先改变的是装着排序序号的position那一列的值,值的大小起始值是base_index决定的,所以如果想排序后页面的序号是从正数开始,就要改变base_index的值

以root身份登录linux以后,

ls -al

可以看到

-rw-rw-r–  1 wangzheng wangzheng       269 12月 25 19:25 Capfile

其中第一列的第2-4位是指文件所有者的权限,5-7位是文件所在的用户组的权限,后三位是指其他人对这个文件的权限。

r代表可读,w代表可写,x代表可执行

第二列的1代表连接数,

第三列的 wangzheng代表文件所有者,

第四列的wangzheng 代表的是文件所属的用户组,

第五列的269指的是文件大小

第六列是最后被修改的时间

第七列是文件名

今天在数据库里新增人员的时候出了点小问题,有人员重复了,以至于要删除一些,大师和pp指导完成的。

$rails  c  p

=>CmsUser.all

=>CmsUser.all.last

=>CmsUser.where(“email = ?”, ‘shi’)

=>CmsUser.where(“email like ?”,’%shi%’).last

=>a=CmsUser.where(“email like ?”,’%shi%’).last

=>a.destory

=>CmsUser.all.size

=>CmsUser.where(‘email not like ?’, ‘%@%’).size

=>CmsUser.where(‘email not like ?’, ‘%@%’)

=>CmsUser.where(‘email not like ?’, ‘%@%’).map(&:email)

=>CmsUser.where(‘email not like ?’, ‘%@%’).delete_all

=>CmsVideo.all.each_with_index{|v,i| v.update_attribute(“position”,i)}

=>

CmsModule.order(‘id asc’).each_with_index do |tv_module, index|

tv_module.update_attributes(:position => index)

end

 

=>CmsVideoInformation.where(‘video_id =?’,’6300′).each{|v| v.update_attribute(“last_episode_index”,”35″)}

最近的项目里发现一个问题,大师和pp写的index页面就好使,我写index页面就不往index页面跳,总是提示没有show页面,然后上一个项目里,不得不写了个show页面,当~~~这次问了下pp,为啥我的index没有用呢,pp说我路由地址写错了,并教我用下面的语句查看了routes的真实内容。

$ bundle exec rake routes > tempt

$ vim tempt