标签: ruby

RHEL6 中的 gem 命令在哪里?

我刚刚构建了 RHEL 6,我需要能够安装 ruby​​ gems 等。我安装了 ruby​​ 1.8.7 软件包,但在任何地方都没有 gem 命令?是什么赋予了?

linux redhat ruby

6
推荐指数
1
解决办法
2万
查看次数

在 Chef 中复制整个目录结构

我有一个目录结构(示例数据),我想从 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但是有更干净的东西吗?

还是我以错误的方式解决这个问题?

directory ruby chef

6
推荐指数
1
解决办法
2万
查看次数

为什么 puma 不使用它的所有线程?

我正在使用 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)

nginx web-server ruby ruby-on-rails

6
推荐指数
1
解决办法
898
查看次数

哪种方式是将变量传递给厨师模板的正确方法?

查看此官方文档:https : //docs.chef.io/resource_template.html我看到了将变量传递给使用“{”、“({”或“(”) 来限定变量范围的模板资源的示例。

我找不到解释差异的地方或为什么我会使用一种形式而不是另一种形式。运行配方时真的有什么实际区别吗?

示例 1:

template '/tmp/config.conf' do
  source 'config.conf.erb'
  variables(
  :config_var => node['configs']['config_var']
)
end
Run Code Online (Sandbox Code Playgroud)

示例 2:

template '/tmp/config.conf' do
  source 'config.conf.erb'
  variables{
  :config_var => node['configs']['config_var']
}
end
Run Code Online (Sandbox Code Playgroud)

示例 3:

template '/tmp/config.conf' do
  source 'config.conf.erb'
  variables({
  :config_var => node['configs']['config_var']
})
end
Run Code Online (Sandbox Code Playgroud)

ruby chef

6
推荐指数
1
解决办法
2万
查看次数

当我的网站关闭时如何获得警报?

我的博客是一个自定义的 ruby​​/rack 应用程序,并且每隔几周就会随机崩溃。有时我好几天都没有注意到,如果发生这种情况,我希望立即收到通知。

最好的方法是什么?我正在运行 Centos 5.3、Nginx、Passenger、Rack 等。

我已经考虑想办法通过电子邮件将错误日志的尾部通过电子邮件发送给自己,因为这将帮助我捕获所有内容,而不仅仅是那个应用程序(它会告诉我缺少链接等)。有没有简单的方法来做到这一点?

谢谢!

linux monitoring log-files centos ruby

5
推荐指数
1
解决办法
6520
查看次数

需要(某些)根访问权限的脚本

我有一个关于系统管理脚本的一般问题,这些脚本需要以 root 访问权限执行“某些”命令,而其他命令则需要作为普通的非 root 用户(即 myusername 等)执行。我应该提到我在 Linux Red Hat 4 系统上使用 Ruby 1.8.6。到目前为止,我看到的建议是:

  1. 允许来自 sudoers 的访问:
    USERNAME = NOPASSWD: /path/to/script, /etc/init.d/httpd, /path/to/somethingelse
    这个语法正确吗?如果是这样,我是否想在脚本中列出我不想提示输入密码的所有特定命令,这是否正确?

  2. 设置 suid
    http://www.wellho.net/mouth/733_Perl-for-Systems-Admin-suid-scripts.html
    以 root 权限运行 Perl 脚本:
    a) 将脚本的所有者设置为 root
    b) 设置(chmod u+s filename) 文件上的 suid 位
    c) 关闭对文件的读取权限,并对除 root 之外的所有人打开执行权限 (chmod go=x)
    但其他研究表明您只能在二进制文件上设置 suid更高版本的 Linux 系统(我的脚本实际上将在较旧版本的 RH4 上运行,但我们最终可能会升级,因此我希望向前兼容)。我不认为我想为此创建一个二进制文件!

  3. '将 ssh 与生成的公钥/私钥一起使用。可以将密钥配置为仅允许使用它执行某些命令。

  4. 对于任何需要 root 的脚本命令,保留 sudo:
    system 'sudo rake ts:rebuild'(当然,这有所有这些密码提示的缺点!)

  5. 以 root 身份执行脚本
    但是我想以普通用户身份运行的命令呢?

  6. 以root身份执行su username(对于需要以普通用户
    身份运行的任务)'以root身份运行脚本,以root身份执行一堆任务,su newUser以newUser身份执行一堆任务,退出(退出回到root用户) 以 root 身份执行更多任务。(由詹姆斯在下面提出)

我为没有更好地掌握这个主题而感到羞耻,但我有点惊讶我提到的多少 Ruby“脚本书籍”没有解决这个问题!我想这更像是一件“不务正业”的事情,但似乎要做任何有实质性用途的事情,您很可能会遇到这种情况。

编辑:像 …

permissions sudo ruby

5
推荐指数
2
解决办法
3961
查看次数

如何启用 redmine (ruby on rails) 日志记录?

出于某种原因,我的 RedMine 安装从未获得任何日志文件。

Redmine 是一个用 Ruby on Rails 编写的开源项目管理系统。

我是 Ruby 或 Rails 的新手。

已经搜索了 wiki、论坛、票证,但对这个看似简单的事情没有任何线索。

顺便说一下,这是对这个 TurnKey Linux 应用程序上一个版本的升级。我可以看到旧版本的备份文件夹有一个包含大量日志消息的日志文件。

但是我在 /var/www/railsapp/log/production.log 中只有几天前的一行宣布创建日志。

现在,我真正的问题是在应用程序中开始发生一些奇怪的事情,但我觉得 A) 查看日志,我可能意识到这是我在配置中更改的内容(与 VM 和网络设置混为一谈)B)将有日志将问题发布到 redmine 团队。

同时,我什至无法记录任何内容。是否有要设置的调试级别?

真诚的,韦恩

installation logging redmine ruby ruby-on-rails

5
推荐指数
1
解决办法
1万
查看次数

是否可以使用 RVM 安装预编译的 Ruby 版本?

我正在使用 EC2,有时会启动我只想使用很短时间的服务器。通常我想在它们上安装某个或多个版本的 Ruby,对于这个 RVM 来说非常方便——如果不是因为编译 Ruby 需要很长时间。当剩下的服务器设置在几分钟内完成时,只需要等待近半个小时来编译 Ruby 真的很无聊。它完全扼杀了云计算体验。

有没有办法获得 RVM 的便利,而无需为我启动的每个新服务器编译每个 Ruby 版本?我可以预编译一个 Ruby 版本并将其保存在某个可访问的地方,然后让 RVM 使用它而不是从源代码编译它吗?我可以在安装 Ruby 版本后简单地将某个目录归档到 RVM 根目录下,将其保存在某处,然后将其解压缩到我启动的下一个服务器上的正确位置吗?在这种情况下,我需要保留哪些文件和目录?

我想使用 RVM 不仅是为了能够在 Ruby 版本之间切换,还因为它允许我为不同的应用程序保留单独的 gemset,所以不使用 RVM 会非常不方便。

所有服务器都具有相同的操作系统和架构,Ubuntu 10.04,32 位。

ruby amazon-ec2 rvm

5
推荐指数
2
解决办法
4095
查看次数

应如何将秘密文件推送到 EC2(在 AWS 上)Ruby on Rails 应用程序?

应如何使用亚马逊 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 中:

sources:  
    /etc/myapp: http://s3.amazonaws.com/mybucket/myobject 
Run Code Online (Sandbox Code Playgroud)

按照这些指示,我将文件上传到 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)

amazon-s3 ruby ruby-on-rails amazon-ec2 amazon-web-services

5
推荐指数
1
解决办法
3706
查看次数

RPM 打包 ruby​​ 项目

我想将从 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/。在网上我可以看到一些关于供应商一切政策的帖子,它似乎不正确的操作明智,因为很多宝石将被重复。由于我没有红宝石背景,我不知道它的确切优点/缺点

如果有人已经做了类似的事情,你会采取哪一种方式?从运营角度来看,什么才是最好的解决方案?

fedora rpm ruby packaging rubygems

5
推荐指数
1
解决办法
1009
查看次数