针对假如已经是安装了redis,只是是单部署,需要把他切换成redis集群+哨兵模式,我因为偷懒,就写了个脚本来执行,各位看官,请品~你品~你细品~
首先准备个升级包,放到任意路径,内容如下:

第一个文件不用管,第二个跟第四个,是把里面的配置改好,如何配置请参考我之前写的redis集群一,
然后是upgrade.sh脚本内容:
1 #!/bin/bash
2
3 base_path=/home/zmoon
4 redis_package_name=redis-5.0.12
5
6 #安装文件名称(安装文件位置=安装位置+安装文件名称)
7 redis_path=/redis-5.0.12
8 redis_conf=/etc/redis.conf
9 sentinel_conf=/etc/sentinel.conf
10 monitor_redis=/home/zmoon/bin
11
12
13
14 #判断redis是否安装
15 check_redis(){
16 if [ -d "$base_path$redis_path" ]; then
17 echo "redis 已安装,无需再次安装!"
18 return 1
19 else
20 return 0
21 fi
22 }
23
24 #判断etc
25 check_redis_conf(){
26 if [ -f "$base_path$redis_path$redis_conf" ]; then
27 echo "redis.conf 已存在,无需再次安装!"
28 return 1
29 else
30 return 0
31 fi
32 }
33
34 #判断etc redis.conf,sentinel.conf是否存在
35 check_sentinel_conf(){
36 if [ -f "$base_path$redis_path$sentinel_conf" ]; then
37 echo "sentinel.conf 已存在,无需再次安装!"
38 return 1
39 else
40 return 0
41 fi
42 }
43
44
45 copy_redis_conf(){
46 mkdir -p $base_path$redis_path/etc
47 cp redis.conf $base_path$redis_path/etc/redis.conf
48 return 2
49 }
50
51 copy_sentinel_conf(){
52 mkdir -p $base_path$redis_path/etc
53 cp sentinel.conf $base_path$redis_path/etc/sentinel.conf
54 return 2
55 }
56
57 copy_monitor_sh(){
58 cp install-zm-redis.sh $monitor_redis/install-zm-redis.sh
59 return 2
60 }
61
62 install_redis(){
63 echo "安装redis"
64
65 tar -zxvf $redis_package_name.tar.gz
66
67 echo "开始编译及安装。。。"
68 cd $redis_package_name
69
70 make
71 make PREFIX=$base_path$redis_path install
72
73 #切换到redis目录 新建etc文件夹
74 mkdir -p $base_path$redis_path/etc
75
76 cd ..
77
78 #把配置好的文件复制过来
79 cp redis.conf $base_path$redis_path/etc/redis.conf
80 cp sentinel.conf $base_path$redis_path/etc/sentinel.conf
81
82 return 2
83
84 }
85
86 main(){
87 echo "base_path:$base_path"
88
89 #判断当前用户是否为root用户,不是则终止部署
90 if [ `whoami` != "root" ]; then
91 echo "部署请将用户切换到root用户,安装终止"
92 exit 1
93 fi
94
95 if [ ! -d "$base_path" ]; then
96 mkdir $base_path
97 fi
98
99 #检查是否有redis进程
100 # 停止正在运行的services-应用
101 echo "检查是否有redis进程"
102 pids=`ps -ef|grep redis-server|grep -v 'grep'|awk '{print $2}'`
103 pidsentinel=`ps -ef|grep redis-sentinel|grep -v 'grep'|awk '{print $2}'`
104 pids=${pids%/*}
105 if [ -n "$pids" ];then
106 for pid in $pids
107 do
108 kill -9 $pid
109 done
110 fi
111
112 pidsentinel=${pidsentinel%/*}
113 if [ -n "$pidsentinel" ];then
114 for pid in $pidsentinel
115 do
116 kill -9 $pid
117 done
118 fi
119
120 echo "------------------------------------------------"
121 echo "Redis service stop"
122 echo "------------------------------------------------"
123
124 #安装redis
125 check_redis
126 if [ $? -eq 0 ]; then
127 install_redis
128
129 if [ $? -eq 2 ]; then
130 echo "redis 安装成功!"
131 else
132 echo "redis 安装失败,安装终止!"
133 exit 1
134 fi
135 fi
136
137 #安装redis
138 check_redis_conf
139 if [ $? -eq 0 ]; then
140 copy_redis_conf
141
142 if [ $? -eq 2 ]; then
143 echo "redis.conf copy成功!"
144 else
145 echo "redis.conf copy失败,copy终止!"
146 exit 1
147 fi
148 fi
149
150 #安装redis
151 check_sentinel_conf
152 if [ $? -eq 0 ]; then
153 copy_sentinel_conf
154
155 if [ $? -eq 2 ]; then
156 echo "sentinel.conf copy成功!"
157 else
158 echo "sentinel.conf copy失败,copy终止!"
159 exit 1
160 fi
161 fi
162
163 copy_monitor_sh
164
165 if [ $? -eq 2 ]; then
166 echo "看门猫redis脚本 copy成功!"
167 else
168 echo "看门猫redis脚本 copy失败,copy终止!"
169 exit 1
170 fi
171
172 #提示“请输入当前节点IP(xx.xx.xx.xx):”,把输入IP保存入变量selfIp中
173 read -p "请输入当前节点IP(xx.xx.xx.xx):" selfIp
174 #提示“请输入Redis主节点IP(xx.xx.xx.xx):”,把输入IP保存入变量nodeIp中
175 read -p "请输入当前主节点IP(xx.xx.xx.xx):" nodeIp
176
177
178 if [ $selfIp = $nodeIp ]
179 then
180 sed -i 's#.*'"sentinel monitor mymaster.*#sentinel monitor mymaster ${nodeIp} 6379 2"'#' /home/zmoon/redis-5.0.12/etc/sentinel.conf
181 else
182 echo -e "replicaof ${nodeIp} 6379" >> /home/zmoon/redis-5.0.12/etc/redis.conf
183
184 sed -i 's#.*'"sentinel monitor mymaster.*#sentinel monitor mymaster ${nodeIp} 6379 2"'#' /home/zmoon/redis-5.0.12/etc/sentinel.conf
185 fi
186
187 #启动redis
188 $base_path$redis_path/bin/redis-server $base_path$redis_path/etc/redis.conf &
189 $base_path$redis_path/bin/redis-sentinel $base_path$redis_path/etc/sentinel.conf &
190 }
191 main $1
192 exit 0
里面首先判断是否有redis进程与sentinel进程,有则kill掉,
然后又判断是否有安装redis,
然后是etc下的两个配置文件是否存在,
进而是修改配置文件的内容,
最后启动redis服务与哨兵服务,redis升级完成。
请各位看官大大参与评论,指点不足~
尝试通过RVM将RubyGems升级到版本1.8.10并出现此错误:$rvmrubygemslatestRemovingoldRubygemsfiles...Installingrubygems-1.8.10forruby-1.9.2-p180...ERROR:Errorrunning'GEM_PATH="/Users/foo/.rvm/gems/ruby-1.9.2-p180:/Users/foo/.rvm/gems/ruby-1.9.2-p180@global:/Users/foo/.rvm/gems/ruby-1.9.2-p180:/Users/foo/.rvm/gems/rub
我在我的Rails项目中使用Pow和powifygem。现在我尝试升级我的ruby版本(从1.9.3到2.0.0,我使用RVM)当我切换ruby版本、安装所有gem依赖项时,我通过运行railss并访问localhost:3000确保该应用程序正常运行以前,我通过使用pow访问http://my_app.dev来浏览我的应用程序。升级后,由于错误Bundler::RubyVersionMismatch:YourRubyversionis1.9.3,butyourGemfilespecified2.0.0,此url不起作用我尝试过的:重新创建pow应用程序重启pow服务器更新战俘
我实际上是在尝试使用RVM在我的OSX10.7.5上更新ruby,并在输入以下命令后:rvminstallruby我得到了以下回复:Searchingforbinaryrubies,thismighttakesometime.Checkingrequirementsforosx.Installingrequirementsforosx.Updatingsystem.......Errorrunning'requirements_osx_brew_update_systemruby-2.0.0-p247',pleaseread/Users/username/.rvm/log/138121
我最近决定从我的系统中卸载RVM。在thispage提出的一些论点说服我:实际上,我的决定是,我根本不想担心Ruby的多个版本。我只想使用1.9.2-p290版本而不用担心其他任何事情。但是,当我在我的Mac上运行ruby--version时,它告诉我我的版本是1.8.7。我四处寻找如何简单地从我的Mac上卸载这个Ruby,但奇怪的是我没有找到任何东西。似乎唯一想卸载Ruby的人运行linux,而使用Mac的每个人都推荐RVM。如何从我的Mac上卸载Ruby1.8.7?我想升级到1.9.2-p290版本,并且我希望我的系统上只有一个版本。 最佳答案
我完全不是程序员,正在学习使用Ruby和Rails框架进行编程。我目前正在使用Ruby1.8.7和Rails3.0.3,但我想知道我是否应该升级到Ruby1.9,因为我真的没有任何升级的“遗留”成本。缺点是什么?我是否会遇到与普通gem的兼容性问题,或者甚至其他我不太了解甚至无法预料的问题? 最佳答案 你应该升级。不要坚持从1.8.7开始。如果您发现不支持1.9.2的gem,请避免使用它们(因为它们很可能不被维护)。如果您对gem是否兼容1.9.2有任何疑问,您可以在以下位置查看:http://www.railsplugins.or
我们有一个目前在Rails2.3.12版和Ruby1.8.7版上运行的应用程序。我们想将我们的应用程序更新到Rails4.0和Ruby2.1.0。我们有大约200个模型和150个Controller。我想知道升级过程需要多大的努力。您还可以提供升级可以遵循的步骤。我们应该先升级Ruby然后再升级Rails还是相反? 最佳答案 您想要实现的目标将是史诗般的努力。我无法为您提供分步说明,因为不可能在一个答案中涵盖所有情况。我建议不要同时升级Ruby和Rails,而是分步升级。升级本身的复杂性是巨大的,但只要您的应用程序具有合理的测试覆盖
我最近尝试安装rails4.1.0.beta1,但是railss导致以下错误。[RVM]/gems/ruby-2.0.0-p247/gems/activesupport-4.1.0.beta1/lib/active_support/core_ext/module/aliasing.rb:32:in`alias_method':undefinedmethod`graft'forclass`ActiveRecord::Associations::JoinDependency'(NameError)[RVM]/gems/ruby-2.0.0-p247/gems/activesupport-4
我目前有一个运行在4.2.5上的Rails应用程序,我想使用ActionCable而不必将整个应用程序升级到Rails5.0.0.beta3版本并冒破坏所有其他gem的风险。按照我在互联网上看到的指南,我已经尝试过gem'actioncable',github:'rails/actioncable'这不起作用,因为ActionCable存储库已合并到Rails存储库中。我什至试过gem'actioncable',github:'rails/rails'但这似乎不适用于ActionCable合并到Rails时发生的版本重新编号。(唯一低于5.0.0.beta*的版本是0.0.0,这似乎是
我最近正在进行Rails5升级,当我尝试启动Rails控制台时遇到了这个错误:/actionpack-5.0.0/lib/action_controller/test_case.rb:49:ininitialize':wrongnumberofarguments(0for2)(ArgumentError)当前bundleupdaterails已经完成了gem依赖项的解决,足以更新到5.0.0,rspec正在运行(尽管我正在修复很多中断)。我也可以运行railss没有错误。这里是代码中断行:https://github.com/rails/rails/blob/master/action
我目前正在将Railsv2中的应用程序迁移到v3在我的lib/我在子目录中有一些模块,例如,我有lib/search/host_search.rb有一个moduleHostSearchdefdo_search(args)#...endend然后我需要在名为Discovery::HostController的Controller中使用它defsearch_resultsoutput=HostSearch.do_search(:search_string=>@search_string,:page=>params[:page],:user=>@current_user)#...end但是我