我刚刚构建了 RHEL 6,我需要能够安装 ruby gems 等。我安装了 ruby 1.8.7 软件包,但在任何地方都没有 gem 命令?是什么赋予了?
我有一个目录结构(示例数据),我想从 Chef 配方中复制它。似乎唯一的方法是显式创建每个单独的目录和文件:
directory "/mnt/data/experiment1/dataset1" do
recursive true
only_if { node.chef_environment == "dev" }
end
directory "/mnt/data/experiment1/dataset2" do
recursive true
only_if { node.chef_environment == "dev" }
end
directory "/mnt/data/experiment2/dataset1" do
recursive true
only_if { node.chef_environment == "dev" }
end
directory "/mnt/data/experiment1/dataset2" do
recursive true
only_if { node.chef_environment == "dev" }
end
cookbook_file "/mnt/data/experiment1/dataset1/testfile1.txt" do
owner "atom"
group "atom"
mode "0644"
source "sampledata/experiment1/dataset1/testfile1.txt"
only_if { node.chef_environment == "dev"}
end
...
Run Code Online (Sandbox Code Playgroud)
有没有办法简单地从食谱中递归复制整个目录结构?在配方中指定每个文件的名称似乎是多余且容易出错的(即,如果我们将一个文件添加到树中但忘记在配方中引用它,它将不会被复制。)
我想一个 hack 解决方法是找出所有厨师文件被复制到目标机器上的位置并执行一个cp -r但是有更干净的东西吗?
还是我以错误的方式解决这个问题?
我正在使用 puma 和 nxinx,据我所知,即使我以 16 个或更多线程的默认值启动它,它也只使用单个线程。我已经设置了一个新的 rails 应用程序,然后完成了这里描述的设置:
http://blog.wiemann.name/rails-server
这给出了这个示例 nginx 配置:
upstream benchmarkapp.com {server unix:/tmp/benchmark_app.sock fail_timeout=0;}
server {
server_name benchmarkapp.com;
root /home/tristan/benchmark_app/public;
try_files $uri/index.html $uri @benchmarkapp.com;
location @benchmarkapp.com {
proxy_redirect off;
proxy_pass http://benchmarkapp.com;
}
}
Run Code Online (Sandbox Code Playgroud)
然后创建一个简单的控制器动作,它只是休眠 3 秒,然后呈现“hello”:
class WelcomeController < ApplicationController
def index
sleep(2)
render :text => "hello"
end
end
Run Code Online (Sandbox Code Playgroud)
然后我开始使用 puma: puma -t 16 -b unix:///tmp/benchmark_app.sock -S /tmp/benchmark_app.state
一旦运行,我使用 siege 用 10 个并发用户命中它,这是结果
% siege -c 10 -t 60s http://benchmarkapp.com
** SIEGE 2.70
** Preparing 10 concurrent …Run Code Online (Sandbox Code Playgroud) 查看此官方文档:https : //docs.chef.io/resource_template.html我看到了将变量传递给使用“{”、“({”或“(”) 来限定变量范围的模板资源的示例。
我找不到解释差异的地方或为什么我会使用一种形式而不是另一种形式。运行配方时真的有什么实际区别吗?
template '/tmp/config.conf' do
source 'config.conf.erb'
variables(
:config_var => node['configs']['config_var']
)
end
Run Code Online (Sandbox Code Playgroud)
template '/tmp/config.conf' do
source 'config.conf.erb'
variables{
:config_var => node['configs']['config_var']
}
end
Run Code Online (Sandbox Code Playgroud)
template '/tmp/config.conf' do
source 'config.conf.erb'
variables({
:config_var => node['configs']['config_var']
})
end
Run Code Online (Sandbox Code Playgroud) 我的博客是一个自定义的 ruby/rack 应用程序,并且每隔几周就会随机崩溃。有时我好几天都没有注意到,如果发生这种情况,我希望立即收到通知。
最好的方法是什么?我正在运行 Centos 5.3、Nginx、Passenger、Rack 等。
我已经考虑想办法通过电子邮件将错误日志的尾部通过电子邮件发送给自己,因为这将帮助我捕获所有内容,而不仅仅是那个应用程序(它会告诉我缺少链接等)。有没有简单的方法来做到这一点?
谢谢!
我有一个关于系统管理脚本的一般问题,这些脚本需要以 root 访问权限执行“某些”命令,而其他命令则需要作为普通的非 root 用户(即 myusername 等)执行。我应该提到我在 Linux Red Hat 4 系统上使用 Ruby 1.8.6。到目前为止,我看到的建议是:
我为没有更好地掌握这个主题而感到羞耻,但我有点惊讶我提到的多少 Ruby“脚本书籍”没有解决这个问题!我想这更像是一件“不务正业”的事情,但似乎要做任何有实质性用途的事情,您很可能会遇到这种情况。
编辑:像 …
出于某种原因,我的 RedMine 安装从未获得任何日志文件。
Redmine 是一个用 Ruby on Rails 编写的开源项目管理系统。
我是 Ruby 或 Rails 的新手。
已经搜索了 wiki、论坛、票证,但对这个看似简单的事情没有任何线索。
顺便说一下,这是对这个 TurnKey Linux 应用程序上一个版本的升级。我可以看到旧版本的备份文件夹有一个包含大量日志消息的日志文件。
但是我在 /var/www/railsapp/log/production.log 中只有几天前的一行宣布创建日志。
现在,我真正的问题是在应用程序中开始发生一些奇怪的事情,但我觉得 A) 查看日志,我可能意识到这是我在配置中更改的内容(与 VM 和网络设置混为一谈)B)将有日志将问题发布到 redmine 团队。
同时,我什至无法记录任何内容。是否有要设置的调试级别?
真诚的,韦恩
我正在使用 EC2,有时会启动我只想使用很短时间的服务器。通常我想在它们上安装某个或多个版本的 Ruby,对于这个 RVM 来说非常方便——如果不是因为编译 Ruby 需要很长时间。当剩下的服务器设置在几分钟内完成时,只需要等待近半个小时来编译 Ruby 真的很无聊。它完全扼杀了云计算体验。
有没有办法获得 RVM 的便利,而无需为我启动的每个新服务器编译每个 Ruby 版本?我可以预编译一个 Ruby 版本并将其保存在某个可访问的地方,然后让 RVM 使用它而不是从源代码编译它吗?我可以在安装 Ruby 版本后简单地将某个目录归档到 RVM 根目录下,将其保存在某处,然后将其解压缩到我启动的下一个服务器上的正确位置吗?在这种情况下,我需要保留哪些文件和目录?
我想使用 RVM 不仅是为了能够在 Ruby 版本之间切换,还因为它允许我为不同的应用程序保留单独的 gemset,所以不使用 RVM 会非常不方便。
所有服务器都具有相同的操作系统和架构,Ubuntu 10.04,32 位。
应如何使用亚马逊 Web 服务及其弹性 beanstalk 将秘密文件推送到 EC2 Ruby on Rails 应用程序?
我将文件添加到 git 存储库,然后推送到 github,但我想将秘密文件保留在 git 存储库之外。我正在使用以下方式部署到 aws:
git aws.push
Run Code Online (Sandbox Code Playgroud)
以下文件位于 .gitignore 中:
/config/database.yml
/config/initializers/omniauth.rb
/config/initializers/secret_token.rb
Run Code Online (Sandbox Code Playgroud)
通过此链接,我尝试将 S3 文件添加到我的部署中: http://docs.amazonwebservices.com/elasticbeanstalk/latest/dg/customize-containers.html
引用该链接:
示例片段
以下示例从 Amazon S3 存储桶下载 zip 文件并将其解压到 /etc/myapp 中:
Run Code Online (Sandbox Code Playgroud)sources: /etc/myapp: http://s3.amazonaws.com/mybucket/myobject
按照这些指示,我将文件上传到 S3 存储桶,并将以下内容添加到.elasticbeanstalk .ebextensions 目录中的 private.config 文件中:
sources:
/var/app/current/: https://s3.amazonaws.com/mybucket/config.tar.gz
Run Code Online (Sandbox Code Playgroud)
该 config.tar.gz 文件将提取到:
/config/database.yml
/config/initializers/omniauth.rb
/config/initializers/secret_token.rb
Run Code Online (Sandbox Code Playgroud)
但是,部署应用程序时,永远不会复制或提取 S3 主机上的 config.tar.gz 文件。我仍然收到无法找到 database.yml 的错误,并且 EC2 日志没有配置文件的记录,这是错误消息:
Error message:
No such file or directory - /var/app/current/config/database.yml
Exception class:
Errno::ENOENT …Run Code Online (Sandbox Code Playgroud) 我想将从 git 获取的 ruby 程序打包到 RPM 包中。我有一个构建服务器和一个生产服务器(相同的操作系统/相同的架构)。
与大多数 ruby 项目一样,我的项目确实有 gem 依赖项。
我找到了两种做我想做的事情的方法,我想知道哪一种是最好的 - 大多数 UNIX/Linux 哲学 - 操作方面
第一个(对我来说看起来更好)是做一个bundle install --standalone --deployment --path %{buildroot}/usr/lib/rubygems/1.8/gems/ --binstubs %{buildroot}/usr/lib/rubygems/1.8.bin. 这会将 gem 安装在将部署 .rpm 的服务器上的 gem 系统路径上,无需安装捆绑包。我不确定的是,当我使用相同的 gem 安装其他 rpm 时会发生什么?当我删除一个带有在两个包之间共享的 gem 的包时,会发生什么?
该bundle install --deployment命令将直接在项目本身中执行。这样就可以在目录中找到所有内容vendor/。在网上我可以看到一些关于供应商一切政策的帖子,它似乎不正确的操作明智,因为很多宝石将被重复。由于我没有红宝石背景,我不知道它的确切优点/缺点
如果有人已经做了类似的事情,你会采取哪一种方式?从运营角度来看,什么才是最好的解决方案?
ruby ×10
amazon-ec2 ×2
chef ×2
linux ×2
amazon-s3 ×1
centos ×1
directory ×1
fedora ×1
installation ×1
log-files ×1
logging ×1
monitoring ×1
nginx ×1
packaging ×1
permissions ×1
redhat ×1
redmine ×1
rpm ×1
rubygems ×1
rvm ×1
sudo ×1
web-server ×1